(生鲜项目)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