一、视图基类APIView
1、路径:rest_framework.views.APIView。
2、继承:原始View。
3、重新封装成了drf的request对象。
4、返回drf的Response对象。
5、会自动捕获任何APIException异常,并处理成合适的响应信息。
6、在进行dispatch()分发前,会对请求进行身份认证、权限检查、流量控制。
①身份认证类:authentication_classes,列表或元祖。
②权限检查类:permissoin_classes,列表或元祖。
③流量控制类:throttle_classes,列表或元祖。
二、通用视图类GenericAPIView
1、路径:rest_framework.generics.GenericAPIView。
2、继承:APIView。
3、主要增加了操作序列化器和数据库查询的方法,通常在使用时,可搭配一个或多个视图扩展类,为视图扩展类的执行提供方法支持。
4、主要属性:
①queryset:需要查询的模型对象集。
②serializer_class :需要使用的序列化器类。
5、主要方法:
①get_queryset(self):获取queryset属性对应的模型对象集。
②get_object(self):根据路由传入的<pk>值,获取对应模型对象,若该模型对象不存在,会返回404。
③get_serializer(self, args, *kwargs):返回序列化器对象。
④get_serializer_class(self):是get_serializer方法内部执行的方法,可以重写。
三、视图扩展类
1、路径:rest_framework.mixins.视图扩展类。
2、继承:未继承其他视图类。
3、将后端对数据资源的增删查该操作流程封装成了五种简单的方法,若其他视图需要使用这五种方法,可以通过继承相应的视图扩展类来直接获取。
4、方法的实现需要搭配GenericAPIView,调用GenericAPIView提供的序列化器与数据库查询的方法。
5、视图扩展类:
①ListModelMixin:提供了list方法,查询所有。
②CreateModelMixin:提供了create方法,新增一个。
③RetrieveModelMixin:提供了retrieve方法,查询一个。
④UpdateModelMixin:提供了update方法,更新一个。
⑤DestroyModelMixin:提供了destroy方法,删除一个。
四、视图子类
1、路径:rest_framework.generics.视图子类。
2、继承:GenericAPIView及一个或多个视图扩展类。
3、继承了哪个视图扩展类,就会将视图拓展类的list/create/retrieve/update/destroy的方法对应为视图子类的get/post/get/put(patch)/delete方法。
4、视图子类:
①ListAPIView:提供了get方法,查询所有。
②CreateAPIView:提供了post方法,新增一个。
③RetrieveAPIView:提供了get方法,查询一个。
④UpdateAPIView:提供了put(patch)方法,更新一个。
⑤DestroyAPIView:提供了delete方法:删除一个。
⑥ListCreateAPIView:提供了get和post方法,查询所有和新增一个。
⑦RetrieveUpdateAPIView:提供了get和put(patch)方法,查询一个和更新一个。
⑧RetrieveDestroyAPIView:提供了get和delete方法,查询一个和删除一个。
⑨RetrieveUpdateDestroyAPIView:提供了get、put(patch)和delete方法,查询一个、更新一个和删除一个。
五、视图集
1、ViewSetMixin:
①路径:rest_framework.viewsets.ViewSetMixin。
②继承:未继承其他视图类。
③重写了as_view,可以传入actions属性,通过actions属性可以捕捉请求方式从而执行对应的视图类的方法。
2、ViewSet:
①路径:rest_framework.viewsets.ViewSet。
②继承:ViewSetMixin和APIView。
③即可以往as_view写入actions属性,又可以按照APIView的风格写视图方法。
3、GenericViewSet:
①路径:rest_framework.viewsets.GenericViewSet。
②继承:ViewSetMixin和GenericAPIView。
③即可以往as_view写入actions属性,又可以按照GenericAPIView的风格写视图方法。
4、ModelViewSet:
①路径:rest_framework.viewsets.ModelViewSet。
②继承:GenericViewSet和所有视图视图拓展类。
③即可以往as_view写入actions属性,又相当于有了所有视图子类的方法。
5、ReadOnlyModelViewSet:
①路径:rest_framework.viewsets.ReadOnlyModelViewSet。
②继承:GenericViewSet和ListModelMixin、RetrieveModelMixin。
③与ModelViewSet相比,只有get(查询所有)和post(查询一个)两个方法。
六、图形化关系