1.直接HttpResponse返回JSON
from django.views.generic.base import View
from django.http import HttpResponse
import json
from goods.models import Goods
class GoodsListView(View):
def get(self, request):
"""
通过django的View 实现商品列表页
:param request:
:return:
"""
json_list = []
goods = Goods.objects.all()[: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'] = str(good.add_time)
json_list.append(json_dict)
return HttpResponse(json.dumps(json_list), content_type='application/json')
直接通过dict转为json再用HttpResponse返回Json,其中datetime必须在append进dict时就要转为字符串,json.dumps并不会对datetime类型进行转换,同时这种方式如果要返回很多字段的时候,需要用户不断去写代码插入字段来返回数据
2.通过serialize 和 JsonResponse返回JSON
from django.views.generic.base import View
from django.http import HttpResponse, JsonResponse
from django.core import serializers
import json
from goods.models import Goods
class GoodsListView(View):
def get(self, request):
"""
通过django的View 实现商品列表页
:param request:
:return:
"""
goods = Goods.objects.all()[:10]
json_list = serializers.serialize('json', goods)
json_list = json.loads(json_list)
return JsonResponse(json_list, safe=False)
这种方式比较简单,直接从数据库中拿到数据列表后扔给serializers就可以实现数据序列化,然后扔给JsonResponse进行转换,比上面的方式要好的是可以转换datetime类型,不过这种方式json里的格式固定死,不是很灵活
总结:以上两种Django的返回Json的方式都不是很方便,如果项目数据较多,前后端联调的时候不是很便利,当然如果只是简单的数据返回,直接用这两种形式即可,但是如果想灵活,方便地设计返回Json的接口,还是应该使用Django restful framework来进行设计
Comments