使用原始的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  ----

最新文章

  1. Git学习笔记一:新建本地仓库及初始化
  2. HTML5 学习总结(三)——本地存储
  3. How to write perfect C code
  4. react-jsx
  5. coursera机器学习笔记-机器学习概论,梯度下降法
  6. 【第二课】深入理解Handler
  7. python函数和常用模块(二),Day4
  8. 伪多项式时间算法Pseudo-polynomial Algorithms-----geeksforGeek 翻译
  9. 【收集】JAVA多文件 上传文件接口代码 -兼容app
  10. 日期操作类--Date类
  11. Thread message loop for a thread with a hidden window? Make AllocateHwnd safe
  12. C++ AfxBeginThread1
  13. 数据结构(虚树,动态规划):HNOI 2014 世界树
  14. PAT (Advanced Level) 1020. Tree Traversals (25)
  15. JAVA三大特性之三——多态
  16. Linux下安装oracle的一般步骤
  17. day1.接口测试(概念、Postman、SoapUI、jmeter)
  18. 项目中自己一直用到的baseAdapter的类
  19. unity, Collider2D.attachedRigidbody
  20. Json.NET Updates: Merge, Dependency Injection, F# and JSONPath Support

热门文章

  1. 最短路--Bellman-Ford
  2. jq导航
  3. MongoDB 分片管理(四)数据均衡
  4. 006_Python3 数字(Number)
  5. TensorFlow(八):tensorboard可视化
  6. ubuntu中防火墙iptables配置
  7. 判断List<E>内是否有重复对象
  8. 10月清北学堂培训 Day 1
  9. Pycharm使用常见问题
  10. 手动制作BIOS和EFI多启动U盘