Django项目----搜索框功能

背景

实现浏览器搜索引擎的下拉搜索内容效果

一、自定义视图

创建用于接收输入框内容、模糊查询数据、返回查询结果的视图函数。

1、goods应用中的views.py文件定义视图函数:

方法①:使用haystack库

class searchJsonView(View):
    def get(self, request):
        from haystack.query import SearchQuerySet, Raw
        qParams = request.GET.get('q')
        if not qParams:
            return JsonResponse({
                'code': 400,
                'msg': '缺少参数'
            })
        goods = SearchQuerySet().filter(text=Raw(qParams)).order_by('sale_count')
        res_list = []
        try:
            for item in goods:
                search_obj = {}
                search_obj['id'] = item.object.id
                search_obj['name'] = item.object.name
                res_list.append(search_obj)
        except:
            pass
        print('res_list:',res_list)
        return JsonResponse({
            'code': 200,
            'data': res_list,
        })

方法②:使用python的模糊查询语句(推荐)

class SearchJsonView(View):
    def post(self, request):
    	# POST请求接收输入框内容q
        qParams = request.POST.get('q')
        if not qParams:
            return JsonResponse({
                'code': 400,
                'msg': '缺少参数'
            })
        # 使用 Q语句 进行 多字段模糊查询
        article = SelfText.objects.filter(
            Q(title__icontains=qParams) | Q(label__icontains=qParams) | Q(text_content__icontains=qParams) | Q(
                user_name__username__icontains=qParams)).values_list("id", "title")
        res_list = []
        try:
            for item in article:
                search_obj = {'id': item[0], 'title': item[1]}
                res_list.append(search_obj)
        except Exception as e:
            print("搜索报错:", e)
        return JsonResponse({
            'code': 200,
            'data': res_list,
        })

2、添加order_by索引

(如果视图函数使用的是方法②可跳过此步骤)
在应用中的search_indexes.py文件中添加:

sale_count = indexes.CharField(model_attr=‘sale_count’)

修改后,Terminal执行:

python manage.py rebuild_index

该部分配置详情可以查看上一篇文章

3、配置路由

应用下的urls.py文件中添加:

	url(r'^searchJson/', searchJsonView.as_view(),name='searchJson'),

4、添加搜索框下拉框样式

main.css文件添加:

.search_con{
	position:relative;
}
.search_con .search_tips_con{
	position:absolute;
	width:444px;
	line-height:36px;
	border:1px solid #FF5972;
	border-top:0;
	padding:0 36px;
	top:38px;
	background:#fff;
	left:-1px;
	display:none; /*# 页面加载先隐藏*/
}

5、修改base.html

修改页面 search_bar 表单,

{# 网页搜索框 #}
{% block search_bar %}
<div class="search_con fr">
    <form action="{% url 'haystack_search' %}" method="get">
        <input type="text" class="input_text fl" name="q" id="top_search" placeholder="搜索商品" autocomplete="off">
        <input type="submit" class="input_btn fr" name="" value="搜索">
    </form>
    <ul class="search_tips_con" id="search_tips_con">
        <li><a href=""></a></li>
	</ul>
</div>
{% endblock search_bar %}

6、ajax 请求数据渲染页面

每个页面都会有搜索框,因此在 static/js 下创建 search.js,在 base.html 中引入 search.js

	<script src="{% static 'js/jquery-1.12.4.min.js' %}"></script>
    <script src="{% static 'js/search.js' %}"></script>

其中search.js内容如下

$(function(){
    $('#top_search').on('input',function(){
        var val = $(this).val()
        if(!val){
            $("#search_tips_con").html('')
            $("#search_tips_con").hide();
            return false;
        }
        $.ajax({
            url:'/goods/searchJson/?q='+val, success(res){
                if(res.code === 200){
                    $("#search_tips_con").show();
                    var htmlStr = '';
                    for(var i=0;i<res.data.length;i++){
                        htmlStr += '<li><a href="/goods/detail/'+res.data[i].id+'">'+ res.data[i].name+'</a></li>'
                    }
                    if(!htmlStr){
                        htmlStr = '<li><a href="javascript:;">没有搜索到内容</a></li>'
                    }
                    $("#search_tips_con").html(htmlStr);
                }
            }
        })
    })
})

在这里插入图片描述

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Django是一种开源的Web应用程序框架,它能够帮助我们轻松地构建网站和Web应用程序。网上书店项目是使用Django框架来开发的一款电子商务网站。该项目实现了基本的在线购物功能,用户可以选择不同的类别浏览和购买书籍,也可以搜索特定的书籍。管理员可以管理图书库存、添加新书以及处理用户订单。该项目使用了Django的模板语言、ORM和视图函数等特性,能够为开发人员提供便捷的数据操作、权限管理和自动化测试等工具。此外,该项目还使用了Bootstrap等前端技术,使得网站页面更加美观、交互性更好。总体来说,Django网上书店项目是一个非常实用的电商项目,为广大开发者提供了学习Django框架的绝佳机会,也为电子商务行业提供了一种高效的开发方式。 ### 回答2: Django网上书店项目是一个基于Django开发的网站,目的是为用户提供购买书籍的平台。该项目可以帮助用户浏览、搜索、购买、结算购物车等操作,并与管理员交互,管理员可以管理书目、库存、订单等信息。此项目的主要实现是使用Django的MVC架构,包括表单验证、认证、数据库操作和URL路由等。同时,该项目还包含前端网站设计和CSS设置,使得用户可以直观地使用该网站。 该项目的实现可以帮助开发人员学习Django框架的开发流程和细节,以及如何设计数据库模型,实现用户管理和权限控制等。通过该项目学习,可以深入了解Django的MVC架构,并学习如何使用模板、表单和数据库操作等方法。 毋庸置疑,通过理论学习Django只能掌握框架的理论知识,而真正要想深入了解Django的编程技能,则需要练习和实验。Django网上书店项目是一个很好的练习机会,学习者不仅可以学习Django框架的开发方法和调用方式,还可以了解Web应用程序的设计和开发。因此,开发者可以根据该项目进行个性化开发,提高开发技能,并在实践中掌握Django框架的主要特性和优势。 ### 回答3: Django 《网上书店》项目是一个基于 Django 框架开发的网上书店网站。该项目主要实现了网上书店网站的主要功能模块,包括用户登录注册、图书分类浏览、图书信息查询、购物车管理、订单管理、支付等。 该项目采用了 Django 的 MTV 架构,通过模型、视图和模板的分离,实现了逻辑代码和界面代码的分离,使得项目代码清晰易懂、易维护。 在用户登录注册模块中,用户可以通过输入用户名和密码来进行登录,也可以通过注册一个新账号来成为该网站的会员。在图书分类浏览模块中,用户可以通过选择不同的图书类别,浏览该类别下的所有图书信息。在图书信息查询模块中,用户可以通过关键词搜索来获取特定的图书信息。在购物车管理模块中,用户可以将自己感兴趣的图书添加到购物车中,并可以随时对购物车进行增删改操作,调整购物车内的图书数量。在订单管理模块中,用户可以查看自己已下的订单信息,包括订单的时间、图书信息以及订单状态。在支付模块中,用户可以选择不同的支付方式来付款。 该项目实现了一个基本的网上书店网站,能够满足用户对图书在线浏览、购买的需求。但是该项目还存在一些不足之处,比如界面设计不够美观、付款方式较为单一等。因此,如果要进一步拓展该项目,可以考虑优化用户体验,增加更多的功能模块,提高网站的安全性等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值