Django实现列表页商品数据返回教程


Posted in Python onApril 03, 2020

采用的是cbv方式,cbv就是在url中一个路径对应一个类

rom django.views.generic import View
from goods.models import Goods
 
 
class GoodsListView(View):
"""
   通过django的view实现商品列表页
   :param request:
   :return:
   """
  def get(self,request):
  #重写View中的get方法
   goods_list = Goods.objects.all()[:10]
  #返回前所有商品的前10条数据
   json_list = []
   for goods in goods_list:
     json_item = {}
     json_item["name"] = goods.name
     json_item["market_price"] = goods.market_price
     json_item["sold_num"] = goods.sold_num
 
     json_list.append(json_item)
 
   from django.http import HttpResponse
   import json
 
   content = json.dumps(json_list)
   #将JSON格式转成python字符串
   return HttpResponse(content,"application/json")

在urls.py文件中配置函数对应的路由

from goods.views_base import GoodsListView
 
urlpatterns = [
"""
  #商品列表的路由
  url(r'^goods/$',GoodsListView.as_view(),name="goods_list")
"""
]

接下来我们就可以通过url看到返回的数据信息了

Django实现列表页商品数据返回教程

补充知识:django通过ajax请求接口返回多条数据,并动态生成表格,请求表单后将表格数据并入库

一、最近在做接口相关的开发,需求是这样的,通过一个接口所需要传递的参数,调用接口后,处理接口响应的参数,返回多条数据,并动态生成表格,请求表单后将表格的数据入库,下面是我改过的代码,跟实际代码有些出入,但都是差不多的,只是命名相关的改了一下,第三方接口的代码下面不会公布出来,请见谅!

二、其中界面很简单,就一个文本输入框,输入关键字,一个查询按钮,点击的时候触发js事件,并通过ajax请求,还有一个暂时没有数据的表格,查询后动态生成的数据,操作只有一个移除功能,可以移除这条表格的数据,保存后入库,这里只贴主要代码,这里主要通过关键字来查找某个组group的用户信息,具体操作需根据实际业务情况:

(1)、html页面代码如下:

<form method="post" action="{% url 'user:user_info_add' %}">
{% csrf_token %}
<div>
<input id="key_words" name="key_words" type="text">
<a οnclick="query({{ user_id }})">查询</a>
</div>

<table>
<thead>
<tr>
<th>姓名</th>
<th>身份证号</th>
<th>手机号</th>
<th>操作</th>
</tr>
</thead>
<tbody id="user_info">
</tbody>
</table>

<button type="submit">保存</button>

(2)、js事件代码如下:

<script type="text/javascript">
    function query(user_id){
      var key_words= $('#key_words').val()
      $.ajax({
        type: "post",
        url: "{% url 'user:user_query_info' %}",
        dataType: "json",
        data: JSON.stringify({user_id: user_id, key_words: key_words}),
        success: function (data) {
          for (var i = 0; i < data.length; i++) {
            $('#user_info').append("<tr id='row"+i+"'><input type='hidden' name='row"+ i +"' value='"+i+"'><td>"+ data[i]['name'] + "</td><input type='hidden' name='name"+ i +"' value='"+data[i]['name']+"'><td>"+ data[i]['id_no'] + "</td><input type='hidden' name='id_no"+ i +"' value='"+data[i]['id_no']+"'><td>" + data[i]['mobile_no']+"</td><input type='hidden' name='mobile_no"+ i +"' value='"+data[i]['mobile_no']+"'><td><a οnclick='remove("+i+")'>移除</a></td></tr>")
          }
        }
      });
    }
 
    function remove(i) {
      $('#row'+i).remove()
    }
  </script>

(3)、其中点击查询来请求接口,这里django底下的url为user:user_query_info,其中view底下便是查询所需数据,并调用接口UserInfoSearch,这个封装的接口便不提供了,就是封装参数请求过去而已,返回响应的数据动态生成表格,主要代码如下:

from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
from json import loads
from user.models.user_model import User
from interface.models import UserInfoSearch
 
 
class QueryUserInfo(View):
  """
  查询用户信息
  """
  def post(self, request):
    # 获取ajax请求过来的data数据
    for key in request.POST:
      keydict = eval(key)
      user_id = int(keydict["user_id"])
      user_name = str(keydict["user_name"])
 
    # 获取用户相关的数据库数据,供接口使用
    user_object = User.objects.get(id=user_id)
    group_id = user_object.group_id
    query_id = user_object.query_id
    # 请求搜索用户信息接口
    user_info_data = loads(UserInfoSearch.get(
      self, request, query_id, group_id, user_name).content)
    user_info_data = loads(user_info_data)
    # 返回成功进行操作,取出相关数据,并封装进user_info_list这个列表当中,返回一个JsonResponse对象,通过返回的数据动态生成表格
    if user_info_data['code'] == 0:
      print(user_info_data)
      user_data = user_info_data['data']
      user_info_list = []
      for user in user_data:
        user_list = user['userList']
        for list in user_list:
          user_dict = {}
          user_dict['name'] = list['name']
          for info_list in list['infoList']:
            user_dict['id_no'] = info_list['id_no']
            user_dict['mobile_no'] = info_list['mobile_no']
          user_info_list.append(user_dict)
      print(user_info_list)
    else:
      user_info_list = []
    return JsonResponse(user_info_list, safe=False)
 
  @csrf_exempt
  def dispatch(self, *args, **kwargs):
    return super(QueryUserInfo, self).dispatch(*args, **kwargs)

接口返回成功时,响应的数据格式如下:

{
 "code": 0,
 "message": "成功",
 "data": [
  {
   "keywords": "软件工程",
   "groupId": "10",
   "userList": [
    {
     "name": '林小熊',
     "infoList": [
      {
       "id_no": '4413199509237848',
       "mobile_no": '18565726783'
      }
     ]
    }
 {
     "name": '林大熊',
     "infoList": [
      {
       "id_no": '4413199509837848',
       "mobile_no": '18565726788'
      }
     ]
    }
   ]
  }
 ]
}

(4)、请求接口成功后,如果有响应数据的话,就会动态生成表格,在上面的js底下有封装了几个input表单隐藏域,用来保存数据使用,主要的思路是把表格底下的每一条数据的不同列都通过索引来区分标记,比如第一行的就分别为row0,name0,id_no0,mobile_no0,以此类推,主要js的代码如下:

for (var i = 0; i < data.length; i++) {
  $('#user_info').append("<tr id='row"+i+"'><input type='hidden' name='row"+ i +"' value='"+i+"'><td>"+ data[i]['name'] + "</td><input type='hidden' name='name"+ i +"' value='"+data[i]['name']+"'><td>"+ data[i]['id_no'] + "</td><input type='hidden' name='id_no"+ i +"' value='"+data[i]['id_no']+"'><td>" + data[i]['mobile_no']+"</td><input type='hidden' name='mobile_no"+ i +"' value='"+data[i]['mobile_no']+"'><td><a οnclick='remove("+i+")'>移除</a></td></tr>")
}

点击保存之后,要将返回多条数据入库,而关键字是一样的,关键字一样,但是返回数据多天,这里就要筛选处理数据,主要代码如下,那些model还有引包的这里就不附上了,这里主要是记录如何得到所要保存的数据,筛选过滤数据:

class UserInfoAddView(View):
  def post(self, request, user_id):
    """
    添加用户信息
    :param request:
    :param user_id: 用户表id
    :return:
    """
    key_words = request.POST.get('key_words')
    common_user_data = {'key_words': key_words}
    user_info_list = []
    # 获取所有表单数据,但只筛选动态表格底下的表单隐藏域名称包含row的,然后通过这个键找到其值,然后通过其值找到动态表格的各个数据,封装为字典,并追加到列表底下
    for key, val in request.POST.items():
      user_dict = {}
      if 'row' in key:
        name = request.POST.get('name' + val)
        id_no = request.POST.get('id_no' + val)
        mobile_no = request.POST.get('mobile_no' + val)
        user_dict['name'] = name
        user_dict['id_no'] = id_no
        user_dict['mobile_no'] = mobile_no
  # 这里过滤掉循环所产生空的字典,有数据才追加列表
      if user_dict:
        user_info_list.append(user_dict)
 # 循环列表底下的字典数据,并合并公共的数据字典,最后入库
    for user in user_info_list:
      user_data = dict(common_user_data, **user)
      UserInfo.objects.create(**user_data)
    return render(request, '/user/user_info_success.html')

以上这篇Django实现列表页商品数据返回教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
举例讲解Python中的算数运算符的用法
May 13 Python
Python中的pass语句使用方法讲解
May 14 Python
Python使用gensim计算文档相似性
Apr 10 Python
python3实现随机数
Jun 25 Python
Django rest framework工具包简单用法示例
Jul 20 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
Jun 19 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
python中多个装饰器的调用顺序详解
Jul 16 Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
Dec 25 Python
对Python 字典元素进行删除的方法
Jul 31 Python
Python第三方库的几种安装方式(小结)
Apr 03 #Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 #Python
pip install 使用国内镜像的方法示例
Apr 03 #Python
pycharm解决关闭flask后依旧可以访问服务的问题
Apr 03 #Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
Apr 03 #Python
基于python图像处理API的使用示例
Apr 03 #Python
解决json中ensure_ascii=False的问题
Apr 03 #Python
You might like
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
微信域名检测接口调用演示步骤(含PHP、Python)
2019/12/08 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
Python随机生成一个6位的验证码代码分享
2015/03/24 Python
python类中super()和__init__()的区别
2016/10/18 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
python实现逻辑回归的示例
2020/10/09 Python
利用python绘制正态分布曲线
2021/01/04 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
印度尼西亚手表和包包商店:Urban Icon
2019/12/12 全球购物
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
开工仪式策划方案
2014/05/23 职场文书
公司员工安全协议书
2014/11/21 职场文书
员工开除通知书
2015/04/25 职场文书
元旦主持词开场白
2015/05/29 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
MySQL 字符集 character
2022/05/04 MySQL