㈠ . ViewSet 视图集

ViewSetMixin里重写了as_view方法,可以更方便的绑定actions。

ViewSet视图集类不再实现get()、post()等方法,而是实现动作 action 如 list() 、create() 等。
视图集只在使用as_view()方法的时候,才会将action动作与具体请求方式对应上

常用视图集的父类

1) ViewSet

继承自APIView,作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。
在ViewSet中,没有提供任何动作action方法,需要我们自己实现action方法。

2)GenericViewSet
继承自GenericAPIView,作用也与GenericAPIVIew类似,提供了get_object、get_queryset等方法便于列表视图与详情信息视图的开发,当然,他也没有提供任何的action方法。

3)ModelViewSet
继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。

4)ReadOnlyModelViewSet
继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin;

action属性
比如:

urlpatterns = [
url(r’^books/ $ ‘, views.BookInfoViewSet.as_view({‘get’: ‘list’})),
url(r’^books/latest/$ ‘, views.BookInfoViewSet.as_view({‘get’: ‘latest’})),
url(r’^books/(?P\d+)/$ ‘, views.BookInfoViewSet.as_view({‘get’: ‘retrieve’})),
url(r’^books/(?P\d+)/read/$’ , views.BookInfoViewSet.as_view({‘put’: ‘read’})),
]

在视图集中,我们可以通过action对象属性来获取当前请求视图集时的action动作是哪个

现在以ModelViewSet 做代码案例演示:

class BookInfoAPIView(ModelViewSet):# 定义视图的查询集queryset = BookInfo.objects.all()# 指定视图对应的序列化器serializer_class = BookInfoModelSerializer
# url.py中的urlatterns配置
url(r'books/(?P<pk>\d+)/$', views.BookInfoAPIView.as_view({'get': 'retrieve'})),
url(r'books/', views.BookInfoAPIView.as_view({'get': 'list'}))

在继承了ModelViewSet之后,我们只要在路由中配置的时候,说明什么请求对应什么action,就可以很简单的完成视图函数的关于数据库的简单的增删改查。


㈡ . 路由router

上面的方式定义路由,相对来说,还是比较繁琐的,我们现在可以使用更简单的。

REST framework提供了两个router:

  • SimpleRouter
  • DefaultRouter

DefaultRouter与SimpleRouter的区别是,DefaultRouter会多附带一个默认的API根视图,返回一个包含所有列表视图的超链接响应数据。

使用方法:

(1):创建router对象,并注册视图集

from rest_framework import routersrouter = routers.SimpleRouter()
router.register(r'books', BookInfoAPIView, base_name='book')

register(prefix, viewset, base_name)

  • prefix 该视图集的路由前缀
  • viewset 视图集
  • base_name 路由名称的前缀

(2):添加路由数据到urlpatterns中
有下面两种方式都可以

urlpatterns = [...
]
urlpatterns += router.urls
urlpatterns = [...url(r'^', include(router.urls))
]

路由router形成URL的方式


㈢ . 视图集中定义附加action动作

虽然ModelViewSet给我们提供了很简单的定义视图函数的方法,但是,并不能满足咱们的所有需求,所以我们得需要自己定义action动作。

添加自定义动作需要使用rest_framework.decorators.action装饰器。

以action装饰器装饰的方法名会作为action动作名,与list、retrieve等同。

action装饰器可以接收两个参数

  1. methods: 该action支持的请求方式,列表传递
  2. detail: 表示是action中要处理的是否是视图资源的对象(即是否通过url路径获取主键)

detail参数:

  • True 表示使用通过URL获取的主键对应的数据对象
  • False 表示不使用URL获取主键
class BookInfoAPIView(ModelViewSet):# 定义视图的查询集queryset = BookInfo.objects.all()# 指定视图对应的序列化器serializer_class = BookInfoModelSerializer# 自定义action动作@action(methods=['get'], detail=False)def latest(self, request):# 本action是获取最新的书book = BookInfo.objects.latest('id')ser = self.get_serializer(book)return Response(ser.data)

㈣. 视图函数继承关系

这个是从pycharm直接导出的,可以根据图示将视图之间的继承关系梳理清楚。

DRF--【视图集】详解相关推荐

  1. MySQL 视图(详解) navicat如何创建视图

    文章目录 MySQL 视图(详解 一,视图概念 使用视图的原因 二,创建视图 (1)基本语法 (2)创建基于单表的视图 [实例 1] [实例 2] (3)创建基于多表的视图 [实例 3] (4)查询视 ...

  2. 【linux】Valgrind工具集详解(八):Memcheck命令行参数详解

    [linux]Valgrind工具集详解(五):命令行详解中不够全,在此专门针对Memcheck工具中的命令行参数做一次详细的解释. Memcheck命令行选项 –leak-check=<no| ...

  3. php各种编码集详解和在什么情况下进行使用 [php 字符集 显示]

    http://blog.cnsunrun.com/member/blog/blog_info/30/84 ----------------------------------------------- ...

  4. php视图查询的优势,ThinkPHP视图查询详解

    搜索热词 ThinkPHP提供的视图查询应用功能十分强大,用户利用视图查询功能可以将多个数据表的字段内容按需要进行指定和筛选,组织成一个基于这些数据表的视图模型,然后就可以通过该模型直接进行多表联合查 ...

  5. Qt图形视图框架详解-安晓辉-专题视频课程

    Qt图形视图框架详解-12227人已学习 课程介绍         介绍Qt中的Graphics View Framework,涉及View.Scene.Item的关系,如何自定义QGraphicsI ...

  6. 并查集详解 ——图文解说,简单易懂(转)特别好玩

    并查集详解 --图文解说,简单易懂(转) 2016年03月10日 17:38:08 阅读数:6931 标签: 并查集数据结构并查集算法图文解说 更多 个人分类: 算法--并查集 并查集是我暑假从高手那 ...

  7. 编程题50 习题6-8 单词首字母大写【浙大版《C语言程序设计(第4版)》题目集 详解教程】

    编程题50 习题6-8 单词首字母大写[浙大版<C语言程序设计(第4版)>题目集 详解教程] 原题链接:习题6-8 单词首字母大写 (pintia.cn) 参考答案 #include< ...

  8. [MyBatis]-resultMap结果映射集详解

    resultMap结果映射集详解 resultmap是mybatis中最复杂的元素之一,它描述如何从结果集中加载对象,主要作用是定义映射规则.级联的更新.定制类型转化器. resultmap构成元素 ...

  9. mysql视图的更新 条件_mysql中视图更新详解

    视图的可更新性与视图中查询的定义是有关的 一.mysql中那些试图使不可更新的?以下类型的视图是不可更新的 1.包含以下关键字的sql语句:聚合函数(sum.min.max.count).distin ...

  10. php各种编码集详解和以及在什么情况下进行使用 发布:mdxy-dxy 字体:[增加 减小] 类型:转载 字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。 字符集是多个字符的集

    php各种编码集详解和以及在什么情况下进行使用 发布:mdxy-dxy 字体:[ 增加 减小] 类型:转载 字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等. 字符集是多个字符的 ...

最新文章

  1. Sylius不需要缓存使用默认地址
  2. 发票管理软件_财务人员都在用的这款发票管理软件,真的值得购买么?
  3. Centos 的安装(2)
  4. 口译分类词汇:上海景点名集锦
  5. 基于点特征的各位姿求解算法对比(pose-estimation-compared)
  6. 先批标准化还是先激活
  7. 利用 Commons-Fileupload 实现文件上传分析(转)
  8. c语言基础知识点字母和含义,大学c语言必背基础知识_c语言基础知识大全
  9. MATLAB Win10分辨率低的蜜汁改进方法
  10. 无码科技发布第一款产品:Readhub
  11. 得物App购买记录数据爬取
  12. 微信朋友圈内测版-无视权限
  13. 浅谈叠片过滤器设计选型与技术要求
  14. python网易云爬虫网络技术的意义_Python3爬虫实战之网易云音乐
  15. c语言的.h文件怎么写,c语言自己写一个.h的头文件
  16. CAD控件 出三维控件!和手机CAD控件了,欢迎大家使用!
  17. 虚拟化(一):虚拟化及vmware产品介绍
  18. 【跨平台编程工具】XERO CODER 4.2.8.0 For x86 Cracked By PiaoYun/P.Y.G 优雅破解
  19. Web 加载速度优化清单,让你的网站快上加快
  20. android获取各种路径的方法

热门文章

  1. ROCKET PROPULSION ELEMENTS——CLASSIFICATION笔记
  2. 锂电池Simulink模型电池建模二阶RC模型二阶戴维南模型 ,包括说明文档和技术指标
  3. Error:Could not expand ZIP *.aar
  4. 王者荣耀服务器账号怎样注销,王者荣耀账号怎么注销
  5. 上海有哪些IT互联网大厂(2020年版)
  6. 错误Invalid bound statement(not found):xxx问题解决办法
  7. NPP VIIRS卫星数据介绍
  8. 技术大咖云集,GIAC 2017全球互联网架构大会圆满落幕
  9. BOSS直聘推出“百万BOSS拾亿”计划 将提供10亿商业产品补贴
  10. c语言求一到一百奇数乘积,C语言学习之求1到100之间奇数和