django rest framework apiview、viewset总结分析

在前后端分离的系统中,我们需要把后台数据,打包成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)

猜你喜欢

转载自www.cnblogs.com/linyuhong/p/9959539.html