(生鲜项目)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进行了封装

 

第二步: GenericViewSet 是什么?

1. 看源码

class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
  pass

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

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

所以回到我们的初衷, 我们为什么要使用ViewSet? 原因就是方便配置URL, 并在urls文件中, 就可以实现请求方式与逻辑函数的绑定

3. 先有的ViewSet, 后才能使用router, 当然,它们也是固定搭配, 看第9节课笔记

4. ViewSet还有一个非常大的好处, 就是给request绑定了很多action, 这在后面进行动态的serializer时, 非常有用

 

第三步: 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  -------

posted @ 2019-12-25 15:56  渱尘  阅读(305)  评论(0编辑  收藏  举报