其他分享
首页 > 其他分享> > (生鲜项目)10. REST framework 的 View 种类分析

(生鲜项目)10. REST framework 的 View 种类分析

作者:互联网

第一步: GenericApiView 是什么?

1. 看源码

class GenericAPIView(views.APIView):
queryset = None
serializer_class = None
...

2. 很明显, GenericAPIView 就是来处理ORM查询到的querrySet对象和serializer类的, 同时还可以处理分页的相关内容, 但是并不提供对get, post方法的处理

GenericAPIView可以说是REST中最基本的一个类了

另外 APIView 继承的就是 View, 里面对部分内容进行了精简, 最为突出的就是对request, 和 response进行了封装, 而且重新定义了return Response() 这个方法, 

 

第二步: GenericViewSet 是什么?

1. 看源码

class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
  pass

2. 很明显, GenericViewSet 仅仅是 在GenericAPIView 的基础上, 加上了ViewSetMixin的功能

而ViewSetMixin简单的讲, 就是重写了as_view()方法, 并且主动将get和post请求绑定到list和create上面(去看第9节课笔记), 让我们可以更加方便的去配置url

所以回到我们的初衷, 我们为什么要使用ViewSet? 原因就是方便配置URL

3. ViewSet + router 是固定搭配, 看第9节课笔记

 

第三步: Mixin是什么?

1. 首先我们来看这里我们关于返回goods列表的view逻辑的编写

from rest_framework import mixins
from rest_framework import viewsets

class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
"""
商品列表页
"""
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
pagination_class = GoodsPagination # 需要指定分页的类

2. 由于前面已经讲了, Generic没有对get和post请求进行逻辑的编写, 它只负责把接收到的get和post分别绑定给list和create, 那么list和create哪儿来的? 答: Mixin就是干这个事的

3. Mixin包含了下面5个类, 对应的就是http的5种请求方式所绑定的逻辑处理方式

class CreateModelMixin:
    def create(..)

class ListModelMixin:
    def list(...):

class RetrieveModelMixin:
    def retrieve(...):

class UpdateModelMixin:
    def update(...):

class DestroyModelMixin:
    def destroy(...):

4. 到这里就豁然开朗了, 其实只要弄懂了以上3个大类, 那么REST框架内的所有的类, 就都理解了, 因为剩余的所有的类, 都是基于这3个大类进行的功能的封装

 

 

 

 

 

 

-----   over  -------

标签:GenericAPIView,10,...,list,REST,framework,post,class,def
来源: https://www.cnblogs.com/jiangzongyou/p/12097159.html