django+easyui实现简单搜索功能和render返回的页面刷新

前文

  需求是针对render返回的结果进行数据搜索,初始想法是针对render返回的数据直接在前端进行数据遍历,但因为本身是分页,一次只能返回当页的结果,所以还是通过页面上的按钮向后台发起请求实现数据的更新。关于简单的table实现,如文章:django+easyui实现数据表格分页展示

前端代码

  在table前增加form表单,通过action跳转到对应的视图函数,详细代码如下:

<form action="{% url 'user_sql_search' %}" method="post" name="addForm" onsubmit="return submitFun();">
    <input type="text" name="username">
    <input type="submit" value="用户名查询" name="submit">
</form>

  注意的是这边的url的名字是在django的urlpatterns里指定name的url,才能进行跳转。在form表单里实现onsubmit方法,这样可以防止非空提交。js部分如下:

<script type="text/javascript">
    function submitFun(){
          if(addForm.username.value==''){
              alert("请输入用户名再查询");
              return false;
          }
    }
</script>

后端代码

  后端和之前的差别不大,可以用mysql-connector来实现sql语句,这样相对性能较好,并且可以实现比较复杂的语句。安装:

python -m pip install mysql-connector

  在sql语句可以用like实现模糊搜索(如select * from table where username like ‘%xx%’),也可以直接用where和=实现精确搜索,详细代码如下:

def user_sql_search(request):
    import mysql.connector
    print(request.POST.get('username'))
    content = request.POST.get('username')
    if not content:
        data = {}
        data['status'] = 600
        return HttpResponse(json.dumps(data), content_type='application/json')
    sql = 'select * from table where username ="xx" ' #输入sql语句,指定where的精确匹配。
    try:
        conn = mysql.connector.connect(**config) # 指定host/port/db/user/ps等配置到config字典里
        cursor = conn.cursor()
        cursor.execute(sql)
        rows = cursor.fetchall()
        print(rows)
    except Exception as err:
        logger.error(err)
        raise
    paginator = Paginator(rows, 20) #按20每页的数量显示
    page = request.GET.get('page')
    if page:
        data_list = paginator.page(page).object_list
    else:
        data_list = paginator.page(1).object_list
    try:
        page_object = paginator.page(page)
    except PageNotAnInteger:
        page_object = paginator.page(1)
    except EmptyPage:
        page_object = paginator.page(paginator.num_pages)
    return render(request, "detail.html", {
         'page_object': page_object,
        'data_list': data_list
    })

  后端的实现也是通过render重新返回页面来实现的,之前有尝试用ajax,但是由于模版数据是由前一个render实现的,ajax返回的数据无法及时刷新,所以最后还是决定再用render刷新页面来实现。

总结

  这边仅提供我的简单实现代码,还可以进行优化或者其他更好的解决思路,可以一起探讨。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值