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):
       """
       通过djangoView 实现商品列表页
       :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):
       """
       通过djangoView 实现商品列表页
       :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来进行设计