第一步: GenericApiView 是什么?

1. 看源码

  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. 看源码

  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逻辑的编写

  1. from rest_framework import mixins
    from rest_framework import viewsets

  1. 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种请求方式所绑定的逻辑处理方式

  1. class CreateModelMixin:
  2. def create(..)
  3. class ListModelMixin:
  4. def list(...):
  5. class RetrieveModelMixin:
  6. def retrieve(...):
  7. class UpdateModelMixin:
  8. def update(...):
  9. class DestroyModelMixin:
  10. def destroy(...):

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

 

 

 

 

 

 

—–   over  ——-

版权声明:本文为jiangzongyou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jiangzongyou/p/12097159.html