Django怎么实现列表页商品数据返回功能

发布时间:2021-03-11 16:56:09 作者:TREX
来源:亿速云 阅读:341

这篇文章主要讲解了“Django怎么实现列表页商品数据返回功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Django怎么实现列表页商品数据返回功能”吧!

采用的是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怎么实现列表页商品数据返回功能”的内容了,经过本文的学习后,相信大家对Django怎么实现列表页商品数据返回功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 在ECSHOP商品列表页和搜索页面,最后出现空商品的解决办法
  2. Django中如何使用Json实现返回数据

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

django

上一篇:Django怎么自定义 models字段显示方式

下一篇:Python第三方库怎么安装

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》