GenericAPIView基类视图比APIView基类视图更简单。但还可以更简单,GenericAPIView视图中,要继承多个mixins,而且,还要写多个方法,能不能有一种办法,直接继承一个类,而且,不需要再在类中写多个方法呢?DRF早就为我们考虑到了!
DRF提供了8个子类视图,用于针对单一功能提供视图。
打开Applications/Examples/views/Schools.py,先导入八个包文件:
from rest_framework.generics import GenericAPIView, CreateAPIView, ListAPIView, RetrieveAPIView, DestroyAPIView, UpdateAPIView, RetrieveUpdateAPIView, RetrieveDestroyAPIView, RetrieveUpdateDestroyAPIView
1 CreateAPIView
提供POST,用于新增一条记录。
class SchoolCreateAPIView(CreateAPIView): """ 【功能描述】:用于新增一条记录 """ serializer_class = SchoolsSerializer
2 ListAPIView
提供GET方法,用于查询多条记录
class SchoolListAPIView(ListAPIView): """ 【功能描述】用于查询所有记录 """ queryset = Schools.objects.all() serializer_class = SchoolsSerializer
3 RetrieveAPIView
提供GET方法,用于查询一条记录
class SchoolRetrieveAPIView(RetrieveAPIView): """ 【功能描述】用于查询一条记录 """ queryset = Schools.objects.all() serializer_class = SchoolsSerializer
4 DestroyAPIView
提供DELETE方法,用于删除一条记录
class SchoolDestroyAPIView(DestroyAPIView): """ 【功能描述】用于删除一条记录 """ queryset = Schools.objects.all() serializer_class = SchoolsSerializer
5 UpdateAPIView
提供PUT和PATCH方法,用于更新一条记录。
DRF自动生成两个相应的接口,并根据前端提交方式,调用相应的接口。
class SchoolUpdateAPIView(UpdateAPIView): """ 【功能描述】用于更新一条记录 """ queryset = Schools.objects.all() serializer_class = SchoolsSerializer
6 RetrieveUpdateAPIView
提供GET、PUT、PATCH方法,用于查询一条记录或者更新一条记录,其中GET用于查询一条记录,PUT和PATCH用于更新一条记录。
DRF自动生成三个相应的接口,并根据前端提交方式,调用相应的接口。
class SchoolRetrieveUpdateAPIView(RetrieveUpdateAPIView): """ 【功能描述】用于查询、更新一条记录 """ queryset = Schools.objects.all() serializer_class = SchoolsSerializer
7 RetrieveDestroyAPIView
提供GET、DELETE方法,用于查询、删除一条记录。
DRF自动生成三个相应的接口,并根据前端提交方式,调用相应的接口。
class SchoolRetrieveDestroyAPIView(RetrieveDestroyAPIView): """ 【功能描述】用于查询、删除一条记录 """ queryset = Schools.objects.all() serializer_class = SchoolsSerializer
8 RetrieveUpdateDestroyAPIView
提供GET、PUT、PATCH、DELETE用于查询、更新、删除一条记录。
DRF自动生成四个相应的接口,并根据前端提交方式,调用相应的接口。
class SchoolRetrieveUpdateDestroyAPIView(RetrieveUpdateDestroyAPIView): """ 【功能描述】用于查询、更新或删除一条记录 """ queryset = Schools.objects.all() serializer_class = SchoolsSerializer
9 配置url
导入上面八个子类视图,并配置相应的url
path('SchoolCreate/', SchoolCreateAPIView.as_view()), path('SchoolListAPI/', SchoolListAPIView.as_view()), path('SchoolRetrieve/<int:pk>/', SchoolRetrieveAPIView.as_view()), path('SchoolDestroy/<int:pk>/', SchoolDestroyAPIView.as_view()), path('SchoolUpdateAPI/<int:pk>/', SchoolUpdateAPIView.as_view()), path('SchoolRetrieveUpdate/<int:pk>/', SchoolRetrieveUpdateAPIView.as_view()), path('SchoolRetrieveDestroy/<int:pk>/', SchoolRetrieveDestroyAPIView.as_view()), path('SchoolRetrieveUpdateDestroy/<int:pk>/', SchoolRetrieveUpdateDestroyAPIView.as_view()),
10 运行,测试所有接口。