zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

DRF的GenericAPIView和Mixin配合使用

2023-04-18 15:36:31 时间

DRF的GenericAPIView和Mixin配合使用

mixin 类提供用于基本视图行为的操作。请注意,mixin 类提供操作方法,而不是直接定义处理程序方法。mixin 类可以从rest_framework.mixins导入,一般我们常用的就是下面几个。

from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin, DestroyModelMixin, UpdateModelMixin

见名知意,它们实现了列表方法和增删改查。下面使用mixin配合GenericAPIView来重新实现在DRF二级视图GenericAPIView中所实现过的所有方法。

class BookCreateAndList(GenericAPIView, CreateModelMixin, ListModelMixin):
    queryset = BookInfo.objects.all().order_by('id')
    serializer_class = BookInfoSerializer
    pagination_class = PageNum

    def get(self, request):
        """列表方法"""
        return self.list(request)

    
    def post(self, request):
        """新增方法"""
        return self.create(request)

class BookRUD(GenericAPIView, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin):
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoSerializer
    lookup_field = 'pk'
    lookup_url_kwarg = 'pk'

    def get(self, request, pk):
        """获取一条数据"""
        return self.retrieve(request)

    def put(self, request, pk):
        """新增一条数据"""
        return self.update(request)

    def delete(self, request, pk):
        """删除一条数据"""
        return self.delete(request)

为了对比起见,GenericAPIView和Mixin配合使用的URL改为如下所示:

path('book1/', BookCreateAndList.as_view()),
path('book1/<int:pk>', BookRUD.as_view()),

两种实现方式的API响应页面截图如下所示:

GenericAPIView和Mixin配合使用,代码量减少了,但是得到的API效果是一致的。虽然这里我们展示的比较简单。但是实际开发中的80%业务常规业务,20%的业务是特殊情况。因此,GenericAPIView和Mixin配合使用还是非常方便的。