美文网首页
Drf 的几个类使用

Drf 的几个类使用

作者: vckah | 来源:发表于2018-06-20 10:24 被阅读0次

    Drf 在以 cbv 的方式写 view 时候,有许多类可以继承,可是往往搞不清这些类的关系,所以整理一下:

    APIView

    这个是 drf 最底层的 View,它继承自 Django 的 View。这个类定制化相对较高,内部帮助我们实现了认证,权限,频率控制基本功能,但分页等我们需要自己操作。实现 get/post 等方法。
    返回:Response(serializer.data)

    GenerAPIView

    GenerAPIView 是对 APIView 进行了封装,使用这个类主要是为了帮助能更好的继承 mixins 类。另外它实现了分页配置功能。例如:

    class SnippetList(mixins.ListModelMixin,
                      mixins.CreateModelMixin,
                      generics.GenericAPIView):
        queryset = Snippet.objects.all()
        serializer_class = SnippetSerializer
    
        def get(self, request, *args, **kwargs):
            return self.list(request, *args, **kwargs)
    
        def post(self, request, *args, **kwargs):
            return self.create(request, *args, **kwargs)
    

    可以看到 get 和 list 函数绑定起来了,而 list 函数是 ListModelMixin 里面的。它里面实现了分页,序列化。
    来看一看 mixins 里面有哪些类,它们分别是 CreateModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin,另外为了实现这些组合,generics 中封装了很多类,各个类里面继承了必要的 mixins,然后帮助我们完成了 get/post 等这些函数。这帮助我们减少了代码量。

    rest-framework.generic

    viewsets

    这里面的类主要继承了 ViewSetMixin 和 GenericAPIView 。它本身没有实现任何功能,主要依靠于 ViewSetMixin。但是它也没有实现方法反射,所以还需要继承 mixins 。ViewSetMixin 本身重写了 as_view 方法,使注册 url 变得简单,它可以与 Routers 结合。另外 ViewSetMixin 实现了 .action 可以让动态 serializer 变得 easy。
    ViewSetMixin 主要实现了不需要写函数来绑定一些方法,而是通过配置 url 来实现绑定。


    GenericViewSet

    总结

    相关文章

      网友评论

          本文标题:Drf 的几个类使用

          本文链接:https://www.haomeiwen.com/subject/owjtyftx.html