DRF的视图编写

       在DRF中APIView属于比较底层的视图类,虽然灵活但使用其进行开发时代码量会较大。使用更高级的接口类会减少代码量,例如generics.GenericAPIView。使用这个父类要同时使用mixins.ListModelMixin,来能实现类似的list、create等功能。

       GenericAPIView其实是继承了APIView,并在其中加入了queryset、serializer_class等方法。例如
       class MyListView(mixins.ListModelMixin,generics.GenericAPIView):
            def get(self,request,*args,**kwargs):            #必须实现get方法才能处理get请求
                self.list(self,request,*args,**kwargs)       #list是ListModelMixin中的方法
       在DRF中已经有做好的ListAPIView做的就是和上图类似的工作,代码也极度相似。甚至还有CreateAPIView和RetrieveAPIView,每个View做个REST规范中的一个操作。使用这几个类的好处是代码可以更少,但自定义功能的组合的话要使用Mixin来自定义多个功能的类。
       这些高阶的APIView内置有分页功能,可以在settings.py中进行设置,也可以自定义,即在高阶类内的pagination_class进行更改。
       其中最高阶的视图是GenericViewSet,其重写了as_view函数,将各种请求操作与action相关联。
       这些View从底层到上层分别是View->APIView->GenericAPIView->GenericViewSet,GenericAPIView内置了很多分页和过滤的功能,能极大减少代码的数量。这些视图要和Mixin象配合残能完成各种数据处理操作。

发表评论

电子邮件地址不会被公开。 必填项已用*标注