GenericViewSet类中没有定义任何代码,他就是继承 ViewSetMixinGenericAPIView,也就说他的功能就是将继承的两个类的功能继承到一起。

    • GenericAPIView,将数据库查询、序列化类的定义提取到类变量中,便于后期处理。
    • ViewSetMixin,将 get/post/put/delete 等方法映射到 list、create、retrieve、update、partial_update、destroy方法中,让视图不再需要两个类。
    1. # 使用GenericViewSet,必须这种语法使用路由
    2. # urls.py
    3. from django.urls import path, re_path, include
    4. from app01 import views
    5. urlpatterns = [
    6. path('api/users/', views.UserView.as_view({"get":"list","post":"create"})),
    7. path('api/users/<int:pk>/', views.UserView.as_view({"get":"retrieve","put":"update","patch":"partial_update","delete":"destory"})),
    8. ]
    1. # views.py
    2. from rest_framework.viewsets import GenericViewSet
    3. from rest_framework.response import Response
    4. class UserView(GenericViewSet):
    5. # 认证、权限、限流等
    6. queryset = models.UserInfo.objects.filter(status=True)
    7. serializer_class = 序列化类
    8. def list(self, request):
    9. # 业务逻辑:查看列表
    10. queryset = self.get_queryset()
    11. ser = self.get_serializer(intance=queryset,many=True)
    12. print(ser.data)
    13. return Response({"code": 0, 'data': "..."})
    14. def create(self, request):
    15. # 业务逻辑:新建
    16. return Response({'code': 0, 'data': "..."})
    17. def retrieve(self, request,pk):
    18. # 业务逻辑:查看某个数据的详细
    19. return Response({"code": 0, 'data': "..."})
    20. def update(self, request,pk):
    21. # 业务逻辑:全部修改
    22. return Response({'code': 0, 'data': "..."})
    23. def partial_update(self, request,pk):
    24. # 业务逻辑:局部修改
    25. return Response({'code': 0, 'data': "..."})
    26. def destory(self, request,pk):
    27. # 业务逻辑:删除
    28. return Response({'code': 0, 'data': "..."})

    注意:开发中一般也很少直接去继承他,因为他也属于是 中间人类,在原来 GenericAPIView 基础上又增加了一个映射而已。