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通过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实现列表页商品数据返回教程就是小编分享给大家的全部内容了,希望能给大家一个参考。
- DeveMobile/EaseMobile 主题双双更新1.1,增加离线存储,社交媒体关注等功能
- Angularjs基础(六)
- 如果机器人拥有痛觉,这个世界会怎样
- 阻止iOS Web APP中点击链接跳转到Safari 浏览器新标签页
- 专门攻击工资支付系统的网络犯罪
- Angularjs基础(五)
- DW Replace Open Sans:将WordPress 后台中的open-sans字体加载源从Google Fonts换为360 CDN
- Google Fonts 已可正常访问,相关插件可卸
- 微信支付宝完成这几个设置,别人偷不走你一毛钱!
- Angularjs基础(四)
- Google Fonts导致WordPress 速度问题的三个解决方案
- DW Replace Open Sans:将WordPress 后台中的open-sans字体加载源从Google Fonts换为360 CDN
- Angularjs基础(三)
- 低多边形(Low-Poly)简介及相关素材分享下载
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在Tensorflow中实现leakyRelu操作详解(高效)
- Django def clean()函数对表单中的数据进行验证操作
- Python3爬虫中Splash的知识总结
- Laravel框架自定义公共函数的引入操作示例
- PHP PDOStatement::setFetchMode讲解
- Python QTimer实现多线程及QSS应用过程解析
- PHP count()函数讲解
- Laravel中9个不经常用的小技巧汇总
- PHP simplexml_load_string()函数实例讲解
- php文件操作之文件写入字符串、数组的方法分析
- php xhprof使用实例详解
- PHP获取远程http或ftp文件的md5值的方法
- PHP addslashes()函数讲解
- PHP+swoole+linux实现系统监控和性能优化操作示例
- PHP中PCRE正则解析代码详解