前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DRF框架(七)——五个视图扩展类 mixins视图工具集-辅助GenericAPIView,一下子继承多个类

DRF框架(七)——五个视图扩展类 mixins视图工具集-辅助GenericAPIView,一下子继承多个类

作者头像
一写代码就开心
发布2021-03-02 14:42:19
5630
发布2021-03-02 14:42:19
举报
文章被收录于专栏:java和python

目录

  • 为什么要用 mixins视图工具集
  • 5个mixins视图工具集
  • 查询list集合
  • 新增数据
  • 单查和修改
  • 路由

为什么要用 mixins视图工具集

之前只是继承了GenericAPIView。代码还是比较多,现在再次升级一下,不仅仅要继承GenericAPIView,还要多继承一些东西,让代码变少,具体还要继承什么?

作用:提供了几种后端视图(对数据资源的增删改查)处理流程的实现,如果需要编写的视图属于这五种,则视图可以通过继承相应的扩展类来复用代码,减少自己编写的代码量。

这五个扩展类需要搭配GenericAPIView父类,因为五个扩展类的实现需要调用GenericAPIView提供的序列化器与数据库查询的方法。

5个mixins视图工具集

1)mixins有五个工具类文件,一共提供了五个工具类,六个工具方法:单查、群查、单增、单删、单整体改、单局部改

2)继承工具类可以简化请求函数的实现体,但是必须继承GenericAPIView,需要GenericAPIView类提供序列化器与数据库查询的方法(见上方GenericAPIView基类知识点)

3)工具类的工具方法返回值都是Response类型对象,如果要格式化数据格式再返回给前台,可以通过 response.data 拿到工具方法返回的Response类型对象的响应数据

五个工具类: CreateModelMixin(增加), DestroyModelMixin(删除), ListModelMixin(查询,查queryset), 查询list集合 RetrieveModelMixin(查询,查对象,针对于存在"pk"), 查询详情 UpdateModelMixin(修改)

查询list集合

1.ListModelMixin(群查)

列表视图扩展类,提供 list 方法快速实现查询视图,返回200状态码。除了查询,该list方法会对数据进行过滤和分页

代码语言:javascript
复制
"""以下是GenericAPIView和mixin的混合使用视图"""
class BookListGenericView(ListModelMixin, GenericAPIView):
    """列表视图"""
    # 指定序列化器类
    serializer_class = BookInfoModelSerializer
    # 指定查询集'数据来源'
    queryset = BookInfo.objects.all()

    def get(self, request):
        return self.list(request)  #  ListModelMixin里面有list方法

新增数据

2.CreateModelMixin(单增) #注意:没有群增的方法,需要自己手动写(******)

创建视图扩展类,提供create方法快速创建资源的视图,成功返回201的状态码

代码语言:javascript
复制
"""以下是GenericAPIView和mixin的混合使用视图"""
class BookListGenericView(CreateModelMixin, ListModelMixin, GenericAPIView):
    """列表视图"""
    # 指定序列化器类
    serializer_class = BookInfoModelSerializer
    # 指定查询集'数据来源'
    queryset = BookInfo.objects.all()

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

单查和修改

3.RetrieveModelMixin(单查)

详情视图扩展类,提供retrieve方法,可以快速实现返回一个存在的数据对象。

4.UpdateModelMixin(更新,修改) #只有单整体改和单局部改,没有群整体改和群局部改

更新视图扩展类,提供update方法,可以快速实现更新一个存在的数据对象,同时也提供partial_update方法,可以实现局部更新。

代码语言:javascript
复制
class BookDetailGenericView(UpdateModelMixin, RetrieveModelMixin, GenericAPIView):
    """详情视图"""
    # 指定序列化器类
    serializer_class = BookInfoModelSerializer
    # 指定查询集'数据来源'
    queryset = BookInfo.objects.all()

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

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

路由

代码语言:javascript
复制
    # # 列表视图的路由GenericAPIView
    url(r'^books/$', views.BookListGenericView.as_view()),
    # 详情视图的路由GenericAPIView
    url(r'^books/(?P<pk>\d+)/$', views.BookDetailGenericView.as_view()),
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 为什么要用 mixins视图工具集
  • 5个mixins视图工具集
  • 查询list集合
  • 新增数据
  • 单查和修改
  • 路由
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档