DRF最高封装的子类视图

# 转载请留言联系

  • 子类视图:

视图作用方法父类
ListAPIView查询多条数据getGenericAPIView
ListModelMixin
CreateAPIView新增一条数据postGenericAPIView
CreateModelMixin
RetrieveAPIView查询一条数据getGenericAPIView
RetrieveModelMixin
UpdateAPIView修改一条数据put,patchGenericAPIView
UpdateModelMixin
DestroyAPIView删除一条数据deleteGenericAPIView
DestroyModelMixin
RetrieveUpdateAPIView查询,更新一条数据get,put,patchGenericAPIView
RetrieveModelMixin UpdateModelMixin
RetrieveUpdateDestroyAPIView获取,更新,删除一条数据get,put,patch,deleteGenericAPIView
RetrieveModelMixin UpdateModelMixin DestroyModelMixin

 

  • 对比以及使用(GenericAPIView+五个拓展类 VS 子类视图)

1.GenericAPIView+五个拓展类

class DepartmentListAPIView(ListModelMixin,CreateModelMixin,GenericAPIView):

    queryset = Department.objects.all()
    serializer_class = DepartmentSerializer

    def get(self,request):
        """查询多条数据"""
        return self.list(request)

    def post(self,request):
        """新增一条数据"""
        return self.create(request)

class DepartmentDetailAPIView(RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView):

    queryset = Department.objects.all()
    serializer_class = DepartmentSerializer

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

    def post(self,request,pk):
        """修改部门"""
        return self.update(request,pk)

    def delete(self,request,pk):
        """删除一个部门"""
        return self.destroy(request,pk)

 

2.子类视图

class DepartmentListAPIView(ListAPIView,CreateAPIView):
    ”“”实现了查询多条数据和新增一条数据的功能"""
    queryset = Department.objects.all()
    serializer_class = DepartmentSerializer


class DepartmentDetailAPIView(RetrieveUpdateDestroyAPIView):
    """实现了查询一条数据、修改一条数据、删除一条数据的功能"""
    queryset = Department.objects.all()
    serializer_class = DepartmentSerializer

 

 3.子类视图的源码分析

# Concrete view classes that provide method handlers
# by composing the mixin classes with the base view.

class CreateAPIView(mixins.CreateModelMixin,
                    GenericAPIView):
    """
    Concrete view for creating a model instance.
    """
    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)


class ListAPIView(mixins.ListModelMixin,
                  GenericAPIView):
    """
    Concrete view for listing a queryset.
    """
    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)


class RetrieveAPIView(mixins.RetrieveModelMixin,
                      GenericAPIView):
    """
    Concrete view for retrieving a model instance.
    """
    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)


class DestroyAPIView(mixins.DestroyModelMixin,
                     GenericAPIView):
    """
    Concrete view for deleting a model instance.
    """
    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)


class UpdateAPIView(mixins.UpdateModelMixin,
                    GenericAPIView):
    """
    Concrete view for updating a model instance.
    """
    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def patch(self, request, *args, **kwargs):
        return self.partial_update(request, *args, **kwargs)


class ListCreateAPIView(mixins.ListModelMixin,
                        mixins.CreateModelMixin,
                        GenericAPIView):
    """
    Concrete view for listing a queryset or creating a model instance.
    """
    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)


class RetrieveUpdateAPIView(mixins.RetrieveModelMixin,
                            mixins.UpdateModelMixin,
                            GenericAPIView):
    """
    Concrete view for retrieving, updating a model instance.
    """
    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def patch(self, request, *args, **kwargs):
        return self.partial_update(request, *args, **kwargs)


class RetrieveDestroyAPIView(mixins.RetrieveModelMixin,
                             mixins.DestroyModelMixin,
                             GenericAPIView):
    """
    Concrete view for retrieving or deleting a model instance.
    """
    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)


class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,
                                   mixins.UpdateModelMixin,
                                   mixins.DestroyModelMixin,
                                   GenericAPIView):
    """
    Concrete view for retrieving, updating or deleting a model instance.
    """
    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def patch(self, request, *args, **kwargs):
        return self.partial_update(request, *args, **kwargs)

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)

 

实际上就是把(GenericAPIView+五个拓展类)的函数封装一下,return回去而已......

转载于:https://www.cnblogs.com/chichung/p/9941579.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值