GenericAPIView 的视图子类

基于视图扩展类和 GenricAPIView 完成的 5 个基本接口,我们发现这几个接口代码就还有许多可以优化的地方。类似视图类中的各个视图方法,其实也可以通用的。
在 drf 中,就提供了 GenericAPIView 视图子类给我们进行简写。

CreateAPIView

提供 post 方法

继承自:GenericAPIView、CreateModelMixin

ListAPIView

提供 get 方法

继承自:GenericAPIView、ListModelMixin

RetrieveAPIView

提供 get 方法

继承自: GenericAPIView、RetrieveModelMixin

DestoryAPIView

提供 delete 方法

继承自:GenericAPIView、DestoryModelMixin

UpdateAPIView

提供 put 和 patch 方法

继承自:GenericAPIView、UpdateModelMixin

RetrieveUpdateAPIView

提供 get、put、patch方法

继承自: GenericAPIView、RetrieveModelMixin、UpdateModelMixin

RetrieveUpdateDestoryAPIView

提供 get、put、patch、delete方法

继承自:GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin

代码示例

使用 GenericAPIView 视图子类写代码就十分简单了:

from rest_framework.generics import \
    ListAPIView,\
    CreateAPIView,\
    RetrieveAPIView,\
    UpdateAPIView,\
    DestroyAPIView

class StudentSonAPIView(ListAPIView,CreateAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentModelSerializer

class Student2SonAPIView(RetrieveAPIView,UpdateAPIView,DestroyAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentModelSerializer

url 路由配置:

urlpatterns = [
    # 视图子类
    path("son/students/", views.StudentSonAPIView.as_view()),
    re_path("^son/students/(?P<pk>\d+)/$", views.Student2SonAPIView.as_view()),
]