1.在goods的app下创建一个views_base页面用来放置django代码,避免与django result framework代码理解混淆
2.如果在view层用django来处理并返回数据
class GoodsListView(View):
def get(self, request):
"""
通过django的view实现商品列表页
:param request:
:return:
"""
json_list = []
goods = Goods.objects.all()[:10]#获取10条数据,一部分商品数据
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
json_list.append(json_dict)#将获取的数据加入到list中
from django.http import JsonResponse
import json
return HttpResponse(json.dumps(json_list), content_type='applecation/json')#数据的序列化
需要一个个的获取数据,这会极大的增加我们自己的代码量,而且add_time无法被序列化,序列化时会报错
3.优化:更改提取操作,用此方法减少数据提取的代码量
from django.forms.models import model_to_dict
for good in goods:
json_dict = model_to_dict(good)#轻松的完成数据的提取
json_list.append(json_dict)
注:
1. json.loads与json.dumps是相反的操作,会将数据变为dict
2.HttpResopnse应传递一个json序列化的数据,传dict是不可以的,所以需要json.dumps(json序列化)一下
3.JsonResponsed的函数对数据进行了content_type='applecation/json’转换和json.dumps操作
4.返回数据的三种方式,一般用第一种方式
1.
import json
from django.core import serializers
json_data = serializers.serialize('json', goods)#数据的序列化
json_data = json.loads(json_data)
from django.http import JsonResponse
return JsonResponse(json_data, safe=False)
2.
import json
from django.core import serializers
json_data = serializers.serialize('json', goods)#数据的序列化
json_data = json.loads(json_data)
from django.http import HttpResponse
return HttpResponse(json.dumps(json_data), content_type='applecation/json')
3.
from django.core import serializers
json_data = serializers.serialize('json', goods)#数据的序列化
from django.http import HttpResponse
return HttpResponse(json_data, content_type='applecation/json')