ViewsViewsets 上的 Mixins 和用法介绍列表

可用混合列表:

  • ListModelMixin: 为 view / viewset 提供 .list() 方法
  • RetrieveModelMixin: 为视图/视图集提供 .retrieve() 方法
  • CreateModelMixin: 为 view / viewset 提供 .create() 方法
  • UpdateModelMixin: 为视图/视图集提供 .update() 方法
  • DestroyModelMixin: 为视图/视图集提供 .destroy() 方法

我们可以在通用视图和视图集中混合和匹配 mixin,以便为它们提供我们需要的相应实用程序:

  1. 使用 .list() .create().destroy() 方法的 API 视图?
    继承 GenericAPIView 并结合适当的 mixins:

    from rest_framework import mixins, generics
    
    from myapp.models import MyModel
    from myapp.serializers import MyModelSerializer
    
    class MyCustomAPIView(mixins.ListModelMixin, 
                          mixins.CreateModelMixin,
                          mixins.DestroyModelMixin,
                          generics.GenericAPIView):
    
        queryset = MyModel.objects.all()
        serializer_class = MyModelSerializer
    
        def get(self, request, *args, **kwargs):
            return self.list(request, *args, **kwargs)
    
        def post(self, request, *args, **kwargs):
            return self.create(request, *args, **kwargs)
    
        def delete(self, request, *args, **kwargs):
            return self.destroy(request, *args, **kwargs)
    
  2. 只有 .list().update() 方法的视图集?
    继承 GenericViewSet 并添加适当的 mixins:

    from rest_framework import mixins
    
    class MyCustomViewSet(mixins.ListModelMixin,
                          mixins.UpdateModelMixin,
                          viewsets.GenericViewSet):
        pass
    

    是的,就这么简单!

总之,我们可以混合和匹配我们需要的每个 mixin,并利用它来定制我们的视图和他们的方法任何可能的组合!