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 socket 超时设置 errno 10054
Jul 01 Python
Python实现过滤单个Android程序日志脚本分享
Jan 16 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
Python中的推导式使用详解
Jun 03 Python
详解Python import方法引入模块的实例
Aug 02 Python
pandas object格式转float64格式的方法
Apr 10 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
Mar 30 Python
在macOS上搭建python环境的实现方法
Aug 13 Python
详解python中eval函数的作用
Oct 22 Python
Python程序控制语句用法实例分析
Jan 14 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 Python
python办公自动化之excel的操作
May 23 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 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
用PHP+MySQL搭建聊天室功能实例代码
2012/08/20 PHP
php数组一对一替换实现代码
2012/08/31 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
2014/08/21 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
详解php命令注入攻击
2019/04/06 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
python实现中文转换url编码的方法
2016/06/14 Python
python脚本替换指定行实现步骤
2017/07/11 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
医院护士的求职信
2014/01/03 职场文书
幼儿园招生广告
2014/03/19 职场文书
售后服务承诺书范文
2014/03/26 职场文书
创先争优一句话承诺
2014/05/29 职场文书
生物学专业求职信
2014/07/23 职场文书
2014会计年终工作总结
2014/12/20 职场文书
个人借条范本
2015/05/25 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
Python+Tkinter打造签名设计工具
2022/04/01 Python