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实现文件按照日期命名的方法
Jul 09 Python
python爬虫入门教程--快速理解HTTP协议(一)
May 25 Python
Python实现文件内容批量追加的方法示例
Aug 29 Python
Python如何生成树形图案
Jan 03 Python
详解Django+Uwsgi+Nginx的生产环境部署
Jun 25 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
python爬虫爬取微博评论案例详解
Mar 27 Python
详解Python 解压缩文件
Apr 09 Python
python os.fork() 循环输出方法
Aug 08 Python
Django框架中间件定义与使用方法案例分析
Nov 28 Python
python函数不定长参数使用方法解析
Dec 14 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 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
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
python与C互相调用的方法详解
2017/07/14 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
django框架中间件原理与用法详解
2019/12/10 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
教师年终个人自我评价
2013/10/04 职场文书
教师档案管理制度
2014/01/23 职场文书
生日礼品店创业计划书范文
2014/03/21 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书