在前后端分离的系统中,我们需要把后台数据,打包成JSON,返回给前端调用。如果用Django自带的View来处理这些数据的话,比如我们需要获得商品(goods)的数据,可以用如下的方式实现
goods/view.py
from django.views.generic import View from goods.models import Goods class GoodsListView(View): def get(self,request): #通过django的view实现商品列表页 json_list = [] #获取所有商品 goods = Goods.objects.all() import json from django.core import serializers from django.http import JsonResponse json_data = serializers.serialize('json',goods) # 使用Django自带的serializers,可以处理“图片”路径和“日期”问题 json_data = json.loads(json_data) return JsonResponse(json_data,safe=False) # 注意,这里用的JsonResponse,这样就不用json.dumps了
效果如图所示:
django的serializer虽然可以很简单实现序列化,但是有几个缺点
(1)字段序列化定死的,要想重组的话非常麻烦
(2)从上面截图可以看出来,images保存的是一个相对路径,我们还需要补全路径,而这些drf都可以帮助我们做到
接下来重点讲解django rest framework里面三种View的用法,它们更加强大而且灵活
首先,这三种View和Django自带的View的关系如图所示:
1、APIView
# googd/views.py from rest_framework.views import APIView from goods.serializers import GoodsSerializer from .models import Goods from rest_framework.response import Response class GoodsListView(APIView): ''' 商品列表 ''' def get(self,request,format=None): goods = Goods.objects.all() goods_serialzer = GoodsSerializer(goods,many=True) return Response(goods_serialzer.data)