百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

第 5 篇:用视图集,简化你的代码(视图化编程)

off999 2024-09-26 16:19 38 浏览 0 评论

作者:HelloGitHub-追梦人物

在 RESTful 架构中,对资源的常规操作无非就是查询、新增、修改、删除等这么几种。为此,django-rest-framework 分别提供了对应通用类视图函数。但是,如果对同一个资源的不同操作逻辑分散在各个视图函数中,从逻辑上来说不太合理,实际中管理起来也不是很方便,还会产生很多重复性的代码。因此,django-rest-framework 引入了视图集(Viewsets),把对同一个资源的不同操作,集中到一个类中。同样的,针对 Web 开发中的常见逻辑,django-rest-framework 也提供了通用视图集,进一步简化开发工作。

使用视图集的一个更大的好处,就是可以配合 django-rest-framework 提供的路由器(router),自动生成 API 的 URL,不需要我们再手工将 URL 模式和视图函数绑定了。所以大部分情况下,即使对资源只有一种操作,我们一般也会使用视图集。

先来看看博客首页文章列表视图集的代码:

所有视图集都要继承视图集的基类。视图集也有 2 个基类:ViewSet 和 GenericViewSet,前者是最基本的视图集类,后者拓展自前者,拓展了很多 Web 开发中的通用逻辑。

要注意一点的是,视图集基类提供的是除资源操作以外的通用逻辑(例如 HTTP 请求预处理、HTTP 响应后处理、认证、鉴权等),而对于资源的操作(如序列化、更新、删除资源等)则放在相应的 Mixin 混入类里。django-rest-framework 提供了资源操作的 5 个混入类,分别对应资源的创建、查询、更新、删除。

  • CreateModelMixin提供 create 方法用于创建资源
  • ListModelMixin 和 RetrieveModelMixin提供 list 和 retrieve,分别用于获取资源列表和单个资源
  • UpdateModelMixin提供 update 方法用于更新资源
  • DestroyModelMixin提供 destroy 方法用于删除资源

此外,create、list、retrieve、update、destroy 的方法名会被映射为对应的 action,称为对资源操作的一个动作。前面说到视图集的一个最大好处就是可以使用路由器(router)自动生成 URL 模式。URL 正是根据 action 的类型来生成的,后面我们会具体说到。

好了,视图集已经创建完毕,接下来我们从视图集生成视图函数,并绑定 URL。

等等,不是说视图集的一个好处是使用路由器自动生成 URL 模式吗?为什么还要手工创建视图函数,然后绑定 URL?

别急,这里只是演示一下如何从视图集生成视图函数并绑定 URL,这样能够帮助你更好地理解视图集的工作方式。事实上,使用路由器自动生成 URL 模式时,路由器内部就是采用了和上面手工生成视图函数并绑定 URL 一样的方式。

路由器的使用非常简单,我们在 初始化 RESTful API 风格的博客系统 中引入了 DefaultRouter 以开启 API 交互后台,DefaultRouter 实例化时默认帮我们注册了一个 API 交互后台的根视图,现在要注册一个新的视图,调用其 register 方法就可以了:

Django-rest-framework 提供 SimpleRouter 和 DefaultRouter 两个路由器类,后者是对前者的拓展,因此通常情况下都使用后者。DefaultRouter 增加了一个 api 的根路由,访问根路由的 URL 就可以看到其他注册的全部 api 路由,一会儿我们将会看到具体的效果。

视图集自动生成 URL 模式非常简单,只需实例化一个路由器,然后调用其 register 方法,这个方法接收 3 个参数,第一个参数是 URL 前缀,所有从注册的视图集生成的 URL 都会带有这个前缀。第二个参数就是视图集,第三个参数 basename 用于指定视图集生成的视图函数名的前缀。在 django 的 URL 中,一条路由通常由 URL 模式,对应的视图函数和视图函数名组成。视图函数名的作用主要用于解析视图函数所对应的 URL。视图集最终会被转为多个视图函数,那么这个视图函数的名字是什么呢?django-rest-framework 的默认生成规则是 basename-action。

例如这里 basename='post',列出资源列表的 action 为 list(见上一篇教程中关于 action 的讲解),所以生成的获取文章资源列表的视图函数名为 post-list,使用 reverse('post-list') 就可以解析出获取文章资源列表的 API(URL)。

basename 可以不指定,django-rest-framework 会自动从视图集 get_queryset 方法返回的结果所关联的 model 获取一个默认值,其值为 model 名小写。不过,根据 Python 之禅,显式优于隐式,因此即使你设置的 basename 和 django-rest-framework 默认生成的一样,也比不指定要好。

刚才说了,我们使用 DefaultRouter 这个路由器,它会自动帮我们注册一个根路由,来看看根路由下有什么。

运行开发服务器,访问 http://127.0.0.1:8000/api/,界面如下:

django-rest-framework 为我们自动生成了 API 交互后台,在这个界面中可以和我们创建的 API 交互,非常方便。API 交互后台首页是所有注册的视图集对应的 URL。目前只有一条 /api/posts/,点击超链接进去,可以看到 /api/posts/ 的返回结果,即全部文章列表。

但是,目前我们的 api 一股脑将全部文章列表的返回了。但是我们的博客文章列表是有分页功能的,接下来我们就使用 django-rest-framework 提供的分页辅助类,一行代码就可以完成分页功能。

『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系我们、加入我们,让更多人爱上开源、贡献开源~

相关推荐

戴尔官网官方网站(戴尔产品官网)

查询步骤如下:1.在戴尔电脑的后盖上找到服务编号,并记录下来。2.之后搜索戴尔官网,在打开的官网界面中点击上方的支持选项,并点击产品支持。3.在打开的产品支持界面中,输入电脑后盖上的服务编号。4.如果...

黑鲨u盘重装系统教程(黑鲨u盘重装系统步骤8)

U盘重装WIn10系统:1、用【u深度u盘启动盘制作工具】制作u盘启动盘,插入电脑usb接口,设置好开机启动项进入u深度主菜单界面,选择“【02】u深度win8pe标准版(新机器)”并回车,2、在u深...

电子邮件免费注册入口(电子邮件在线注册)

1.在网页上搜索maiI163邮箱登录,如果有邮箱账号密码的话就直接输入并点击“登录”,没有的话就点击“立即注册”。2.点击“立即注册”后进入页面,输入信息点击“注册”。3.注册成功后就直接搜索登录。...

win7如何快速启动(windows7如何快速启动)
win7如何快速启动(windows7如何快速启动)

打开操作系统运行:输入"cmd"并点击回车:系统命令提示符自动打开:使用方法直接运行start打开一个新的命令提示符窗口:运行start+文件的绝对存储路径打开对应的文件:运行start+文件夹路径打开对应...

2025-12-29 13:03 off999

怎么升级到win11(怎么升级到win11专业版)

Windows11可以在「开始菜单-设置-Windows更新」中进行手动更新。如果您想主动更新,需先确保您的电脑符合Windows11的最低系统要求。接着,打开「Windows更...

微信好友误删了怎么加回来(微信好友误删了怎么加回来免费)

看到他的评论的话,你可以去你发过的内容里去看看。<br/><br/>好友验证的消息、语音)或者朋友圈内容:<br/>如果你这个朋友喜欢和你在朋友圈聊天的话,你他的手机号也有的话方法添加里输入就可...

access安装包(access安装包怎么安装)
access安装包(access安装包怎么安装)

要下载并安装MicrosoftAccess,可以按照以下步骤进行操作:1.打开您的电脑的浏览器(如谷歌浏览器、火狐浏览器等)。2.在浏览器的搜索栏中输入"下载MicrosoftAccess"。3.从搜索结果中选择适...

2025-12-29 11:51 off999

云骑士装机大师官方网站(云骑士装机大师软件下载)

就是感觉正规吧,还有就是小白那种的比较多,专业店一忽悠就掏钱做系统了。懂装机的哪有花钱去装系统的不靠谱,因为会造成个人信息的泄露。云骑士装机大师是网络装机系统,在网络上能够实现一键装机,非常的简洁方便...

万能钥匙下载免费(安心上网万能钥匙下载免费)

行1.使用手机功能表中自带的浏览器上网,直接搜索需要的软件进行下载安装(下载安卓版本格式为apk)。2.使用电脑下载APK格式的安装包,连接数据线传输至手机,操作手机在应用程序-我的文件中找到安装包,...

500兆宽带用什么路由器(家用路由器什么牌子好 信号强)

1、飞鱼星千兆无线路由器家用2600M双频企业级高速穿墙500M光纤游戏加速VW1900/千兆双频/1900M/大型企业路由器无线500m推荐理由:可以提供企业级别的性能,空旷环境覆盖更广大,...

xp系统怎么卸载软件(xp怎么卸载程序)

1、选中此电脑,点击鼠标右键。2、选择属性点击一下。3、在打开的界面选择控制面板。4、点击程序选项下方的卸载。5、选择要卸载的程序软件,点击鼠标右键。6、点击弹出的选项卸载/更改。7、也可以使用电脑管...

笔记本电脑系统修复软件(笔记本电脑程序修复)

1、超级兔子2013系统修复软件超级兔子是一款完整的系统维护工具。拥有电脑系统评测、垃圾清理和注册表清理、可疑文件和插件检测、网页防护等功能,同时自带一些实用的系统工具,可清理你大多数的文件、注册表里...

联想保修服务包括哪些(联想保修都保修什么)

1、保修36个月的硬件包括:CPU、内存。2、保修24个月的硬件包括:主板、显卡、LCD屏、硬盘、电源适配器、键盘、鼠标模块。3、保修12个月的硬件包括:LCD之附件、光驱、DVD、CDR/W、软驱...

系统科学大会(中国系统科学学会)

2021年各种科学大会的召开时间取决于疫情的发展和国家政策的调整。一些大型的国际科学会议可能会推迟或者采用线上形式进行,以保障参会人员的安全和健康。同时,一些国内的学术会议也会受到疫情的影响,需要推迟...

win10系统下载的内容在哪(win10下载的软件在哪个文件夹)

进入C:\Windows\SoftwareDistribution\Download目录下,通过win10应用商店中下载的安装包都放在此目录下。进入C:\Windows\SoftwareDistrib...

取消回复欢迎 发表评论: