(生鲜项目)06. django的view实现商品列表页
2024-10-20 16:08:06
使用原始的django的View来返回json格式的商品列表
目的是回顾一些django的基础知识, 好与后面的RESTful做对比
goods.views_base.py
from django.views.generic.base import View
# from django.views.generic import ListView from goods.models import Goods class GoodsListView(View):
def get(self, request):
"""
通过django的view实现商品列表页
:param request:
:return:
"""
json_list = []
goods = Goods.objects.all()[:10] # 方式一: 手动一个个赋值给dict
# import json
# from django.http import HttpResponse
# for good in goods:
# json_dict = {}
# json_dict["name"] = good.name
# json_dict["category"] = good.category.name
# json_dict["market_price"] = good.market_price
# # json_dict["add_time"] = good.add_time
# # 这里的add_time是datetime.datetime()对象,json并不支持对其序列化, 此外也不支持ImageField
# json_list.append(json_dict)
# return HttpResponse(json.dumps(json_list), content_type="application/json") # 方式二: 使用model_to_dict一次性返回对象的key和value字典, 同样,json不支持对image和datetime的序列化
# import json
# from django.http import HttpResponse
# from django.forms.models import model_to_dict
# for good in goods:
# good_dict=model_to_dict(good)
# json_list.append(good_dict)
# return HttpResponse(json.dumps(json_list), content_type="application/json") # 方式三: 使用django自带的serializers序列化工具
# serialize(format, queryset, **options) 可直接对多个对象进行操作,
import json
from django.core import serializers
from django.http import HttpResponse, JsonResponse
json_data = serializers.serialize("json",goods) # 此时的json_data就是一个json格式的列表,每一个元素都是一个对象封装成的一个dict,可见一行代码就达到了目的
json_data = json.loads(json_data)
return JsonResponse(json_data,safe=False) # safe默认为true,即默认只能序列化dict格式的,但现在我们需要序列化list格式的
以上使用django自带的3种方法实现了json字符串的返回, 但我们可以从返回的结果中看出一些问题, 见下图
所以, 因为直接返回json的种种不方便, 我们才需要使用RESTful,
----- over ----
最新文章
- Git学习笔记一:新建本地仓库及初始化
- HTML5 学习总结(三)——本地存储
- How to write perfect C code
- react-jsx
- coursera机器学习笔记-机器学习概论,梯度下降法
- 【第二课】深入理解Handler
- python函数和常用模块(二),Day4
- 伪多项式时间算法Pseudo-polynomial Algorithms-----geeksforGeek 翻译
- 【收集】JAVA多文件 上传文件接口代码 -兼容app
- 日期操作类--Date类
- Thread message loop for a thread with a hidden window? Make AllocateHwnd safe
- C++ AfxBeginThread1
- 数据结构(虚树,动态规划):HNOI 2014 世界树
- PAT (Advanced Level) 1020. Tree Traversals (25)
- JAVA三大特性之三——多态
- Linux下安装oracle的一般步骤
- day1.接口测试(概念、Postman、SoapUI、jmeter)
- 项目中自己一直用到的baseAdapter的类
- unity, Collider2D.attachedRigidbody
- Json.NET Updates: Merge, Dependency Injection, F# and JSONPath Support