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 相关文章推荐
python3实现windows下同名进程监控
Jun 21 Python
对python实现二维函数高次拟合的示例详解
Dec 29 Python
python单线程文件传输的实例(C/S)
Feb 13 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
使用python画社交网络图实例代码
Jul 10 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
Python求平面内点到直线距离的实现
Jan 19 Python
解决阿里云邮件发送不能使用25端口问题
Aug 07 Python
python 监控logcat关键字功能
Sep 04 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
Sep 23 Python
Python Pandas解析读写 CSV 文件
Apr 11 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
一个php导出oracle库的php代码
2009/04/20 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
微信小程序的分类页面制作
2017/06/27 Javascript
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
Python list操作用法总结
2015/11/10 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
Python构建图像分类识别器的方法
2019/01/12 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
九年级科学教学反思
2014/01/29 职场文书
生日礼品店创业计划书范文
2014/03/21 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
诚信承诺书
2015/01/19 职场文书
学生检讨书
2015/01/27 职场文书
大学生党员个人总结
2015/02/13 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书