猿创征文 | DjangoRESTframework(八)-9个视图子类的详细使用

DjangoRESTframework(七)-五个扩展类的使用(Create、ListModel,Retrieve,Update,Destroy)

一、CreateAPIView

rest_framework.generics.CreateAPIView

作用:创建一个新的模型对象

继承自: GenericAPIView、CreateModelMixin

CreateModelMixin的原有基础上提供了post方法,内部调用了CreateModelMixin的create方法,使得代码更加精简

1、源代码

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

2、对比使用

继承 GenericAPIView、CreateModelMixin

class CreateApiView(GenericAPIView, CreateModelMixin):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

    def post(self, request):
        return self.create(request)

继承CreateAPIView

class _CreateApiView(CreateAPIView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

二、ListAPIView

rest_framework.generics.ListAPIView

作用:获取所有模型对象的数据

继承自:GenericAPIView、ListModelMixin

在ListModelMixin的继承上提供了get方法,内部调用了ListModelMixinlist方法

1、源代码

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

2、对比使用

继承GenericAPIView、ListModelMixin

class ListApiView(GenericAPIView, ListModelMixin):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

    def get(self, request):
        return self.list(request)

继承ListAPIView

class _ListApiView(ListApiView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

三、RetrieveAPIView

rest_framework.generics.RetrieveAPIView

作用:获取单一模型对象数据

继承自: GenericAPIView、RetrieveModelMixin

RetrieveModelMixin的基础上提供了get方法,内部调用了RetrieveModelMixinretrieve方法

1、源代码

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

2、对比使用

继承GenericAPIView、RetrieveModelMixin

class RetrieveApiView(GenericAPIView, RetrieveModelMixin):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

    def get(self, request, pk):
        return self.retrieve(request)

 继承RetrieveAPIView

class _RetrieveApiView(RetrieveAPIView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

四、DestoryAPIView

rest_framework.generics.DestoryAPIView

作用:删除单一模型对象数据

继承自:GenericAPIView、DestoryModelMixin

DestoryModelMixin的基础上提供了delete方法,内部调用了DestoryModelMixin的destory方法

1、源代码

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

2、对比使用

继承GenericAPIView、DestoryModelMixin

class DestroyApiView(GenericAPIView, DestroyModelMixin):
    queryset = BookInfo.objects

    def delete(self, request, pk):
        return self.destroy(request)

 继承DestoryAPIView

class _DestroyApiView(DestroyAPIView):
    queryset = BookInfo.objects

五、UpdateAPIView

rest_framework.generics.UpdateAPIView

作用:更新单一模型对象数据

继承自:GenericAPIView、UpdateModelMixin

UpdateModelMixin的基础上提供了putpatch方法,内部调用了updatepartial_update方法

1、源代码

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)

2、对比使用

继承GenericAPIView、UpdateModelMixin

class UpdateApiView(GenericAPIView, UpdateModelMixin):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

    def put(self, request, pk):
        return self.update(request)

继承UpdateAPIView

class _UpdateApiView(UpdateAPIView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

六、ListCreateAPIView

rest_framework.generics.ListCreateAPIView

作用:查询所有模型对象数据、创建模型对象数据

继承自:GenericAPIView、ListModelMixin、CreateModelMixin

结合ListModelMixin、CreateModelMixin并在其基础上提供了getpost方法,内部调用了ListModelMixinlist方法、CreateModelMixincreate方法

1、源代码

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)

2、对比使用

继承GenericAPIView、ListModelMixin、CreateModelMixin

class BooksMixinsView(GenericAPIView, ListModelMixin, CreateModelMixin):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

    def get(self, request):
        """获取所有模型对象数据"""
        return self.list(request)

    def post(self, request):
        """创建模型对象数据"""
        return self.create(request)

 继承ListCreateAPIView

class _ListCreateApiView(ListCreateAPIView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

七、RetrieveUpdateAPIView

rest_framework.generics.RetrieveUpdateAPIView

作用:获取单一模型对象数据、更改单一模型对象数据

继承自: GenericAPIView、RetrieveModelMixin、UpdateModelMixin

结合RetrieveModelMixin、UpdateModelMixin在其基础上提供 get、put(整体更新)、patch(局部更新)方法

1、源代码

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)

2、使用

class _RetrieveUpdateAPIView(RetrieveUpdateAPIView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

八、RetrieveDestoryAPIView

rest_framework.generics.RetrieveDestoryAPIView

作用:获取单一模型对象数据、删除单一模型对象数据

继承自:GenericAPIView、RetrieveModelMixin、DestoryModelMixin

RetrieveModelMixinDestoryModelMixin的基础上提供提供 get、delete方法

1、源代码

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)

2、使用

class _RetrieveDestroyAPIView(RetrieveDestroyAPIView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

九、RetrieveUpdateDestoryAPIView

rest_framework.generics.RetrieveUpdateDestoryAPIView

作用:提供单一模型对象的查询、更新、删除

提供 get、put、patch、delete方法

继承自:GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin

1、源代码

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)

2、对比使用

继承GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin

class BookMixinsView(GenericAPIView, DestroyModelMixin, RetrieveModelMixin, UpdateModelMixin):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

    def get(self, request, pk):
        """获取单一模型对象数据"""
        return self.retrieve(request, pk=pk)

    def delete(self, request, pk):
        """删除单一模型对象数据"""
        return self.destroy(request, pk=pk)

    def put(self, request, pk):
        """修改单一模型对象数据"""
        return self.update(request, pk=pk)

 继承RetrieveUpdateDestoryAPIView

class _RetrieveUpdateDestoryAPIView(RetrieveUpdateDestroyAPIView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

十、总结

对于上述的视图类,在使用时大多数使用RetrieveUpdateDestoryAPIView、ListCreateAPIView就基本上能满足对模型对象的增删改查

# 视图
class _ListCreateApiView(ListCreateAPIView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects


class _RetrieveUpdateDestoryAPIView(RetrieveUpdateDestroyAPIView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects


# 路由
path('demo/books/',  _ListCreateApiView.as_view()),
re_path(r'^demo/books/(?P<pk>\d+)/$', _RetrieveUpdateDestoryAPIView.as_view()),

 

 九个视图子类与五个扩展类的区别:

        1、九个视图子类继承至五个扩展类

        2、都依赖于GenericAPIView

        3、九个视图子类在使用时,只需提供序列化器和查询集对象

        4、更精简于五个扩展类、在下面可以看出,这就是封装的好处,提高了编写代码的效率,也精简了代码。

        

class BooksMixinsView(GenericAPIView, ListModelMixin, CreateModelMixin):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

    def get(self, request):
        """获取所有模型对象数据"""
        return self.list(request)

    def post(self, request):
        """创建模型对象数据"""
        return self.create(request)


class BookMixinsView(GenericAPIView, DestroyModelMixin, RetrieveModelMixin, UpdateModelMixin):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

    def get(self, request, pk):
        """获取单一模型对象数据"""
        return self.retrieve(request, pk=pk)

    def delete(self, request, pk):
        """删除单一模型对象数据"""
        return self.destroy(request, pk=pk)

    def put(self, request, pk):
        """修改单一模型对象数据"""
        return self.update(request, pk=pk)
class _ListCreateApiView(ListCreateAPIView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects


class _RetrieveUpdateDestoryAPIView(RetrieveUpdateDestroyAPIView):
    serializer_class = BookSerializer
    queryset = BookInfo.objects

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值