二十、Django-restframework之视图集和路由器
一、视图集和路由器
REST框架包含了一个处理视图集的抽象,它允许开发人员集中精力建模API的状态和交互,并根据通用约定自动处理URL构造。
视图集类与视图类几乎相同,不同之处在于它们提供的是retrieve或update等操作,而不是get或put等方法。
一个ViewSet类只在最后一刻被实例化为一组视图时,绑定的一组方法处理程序,通常是通过使用一个Router类来处理定义URL conf的繁琐操作。
二、使用视图集重构
让我们获取当前的视图,并将它们重构为视图集。
首先,让我们将我们的StudentList和StudentDetail视图重构为一个StudentViewSet。我们可以删除这两个视图,并用一个类替换它们:
class StudentViewSet(viewsets.ModelViewSet):"""This viewset automatically provides `list`, `create`, `retrieve`,`update` and `destroy` actions."""queryset = Student.objects.all()serializer_class = StudentSerializer
这里我们使用ModelViewSet类自动提供完整的默认读和写操作集。我们仍然设置queryset和serializer_class属性,与使用常规视图时完全相同,但不再需要向两个单独的类提供相同的信息。
三、显式地将视图集绑定到url
只有当我们定义URLConf时,处理程序方法才会绑定到对应的动作上。为了了解内部发生了什么,让我们首先从视图集中显式地创建一组视图。在crm/urls.py文件中,我们将ViewSet类绑定到一组具体的视图中。
from crm.views import StudentViewSet
from rest_framework import renderersstudent_list = StudentViewSet.as_view({'get': 'list','post': 'create'
})
student_detail = StudentViewSet.as_view({'get': 'retrieve','put': 'update','patch': 'partial_update','delete': 'destroy'
})
注意我们是如何从每个ViewSet类创建多个视图的,并为每个视图绑定所需要的http方法。
现在我们已经将资源绑定到具体的视图中,我们可以像往常一样用URL conf注册视图。
urlpatterns = format_suffix_patterns([path('students/', project_list, name='student-list'),path('students/<int:pk>/', project_detail, name='student-detail'),
])
四、使用Routers
因为我们使用的是ViewSet类而不是View类,我们实际上不需要自己设计URL conf。使用路由器类,可以自动处理将资源连接到视图和绑定url。我们所需要做的就是注册合适的视图集给路由器,然后让它完成剩下的工作。
这是我们重新连接的crm/urls.py文件。
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from projects import views# Create a router and register our viewsets with it.
router = DefaultRouter()
router.register(r'students', views.StudentViewSet)# The API URLs are now determined automatically by the router.
urlpatterns = [path('', include(router.urls)),
]
向路由器注册视图集类似于提供urlpattern。我们包含两个参数——视图的URL前缀和视图集本身。
我们正在使用的DefaultRouter类也会自动为我们创建API根视图。
五、视图与视图集之间的取舍
使用视图集是一种非常有用的抽象。它有助于确保你的API的URL约定的一致性,最小化你需要编写的代码量,并且允许你专注于你的API的交互和表示,而不是URL conf的细节。
这并不意味着它总是正确的方法。在使用基于类的视图而不是基于函数的视图时,也需要考虑类似的权衡。与单独构建视图相比,使用视图集不那么显式。
相关文章:
二十、Django-restframework之视图集和路由器
一、视图集和路由器 REST框架包含了一个处理视图集的抽象,它允许开发人员集中精力建模API的状态和交互,并根据通用约定自动处理URL构造。 视图集类与视图类几乎相同,不同之处在于它们提供的是retrieve或update等操作,而不是get或…...
[深入理解SSD系列 闪存实战2.1.2] SLC、MLC、TLC、QLC、PLC NAND_固态硬盘闪存颗粒类型
闪存最小物理单位是 Cell, 一个Cell 是一个晶体管。 闪存是通过晶体管储存电子来表示信息的。在晶体管上加入了浮动栅贮存电子。数据是0或1取决于在硅底板上形成的浮动栅中是否有电子。有电子为0,无电子为1. SSD 根据闪存颗粒区分,固态硬盘有SLC、MLC、TLC、QLC、PLC 五种类型…...
论文阅读-MGTAB: A Multi-Relational Graph-Based Twitter Account DetectionBenchmark
目录 摘要 1. 引言 2. 相关工作 2.1. 立场检测 2.2.机器人检测 3.数据集预处理 3.1.数据收集和清理 3.2.专家注释 3.3. 质量评估 3.4.特征分析 4. 数据集构建 4.1.特征表示构造 4.2.关系图构建 5. 实验 5.1.实验设置 5.2.基准性能 5.3训练集大小的研究 5.4 社…...
基于libco的c++协程实现(时间轮定时器)
在后端的开发中,定时器有很广泛的应用。 比如: 心跳检测 倒计时 游戏开发的技能冷却 redis的键值的有效期等等,都会使用到定时器。 定时器的实现数据结构选择 红黑树 对于增删查,时间复杂度为O(logn),对于红黑…...
java多线程与线程池-04线程池与AQS
第7章 线程池与AQS java.util.concurrent包中的绝大多数同步工具,如锁(locks)和屏障(barriers)等,都基于AbstractQueuedSynchronizer(简称AQS)构建而成。这个框架提供了一套同步管理的通用机制,如同步状态的原子性管理、线程阻塞与解除阻塞,还有线程排队等。 在JD…...
优化模型验证关键代码25:样本均值近似技术处理两阶段随机旅行商问题及Gurobipy代码验证
大多数数学规划模型都会考虑到研究问题中存在的不确定性,针对这些不确定性,两种常用的处理方法是鲁棒优化和随机规划。这篇论文我们关注后者,也就是两阶段随机旅行商问题;利用套期保值算法计算不同规模TSP的可行解,同时比较了样本均值近似技术的解的情况,并计算了该问题的…...
老爸:“你做的什么游戏测试简直是不务正业!”——我上去就是一顿猛如虎的解释。
经常有人问我:游戏测试到底是干什么呢?是游戏代练?每天玩游戏?装备随便造,怪物随便秒,线上GM指令随便用?可以每天玩玩游戏,不用忙工作,太爽了?有时朋友不理解…...
JVM垃圾回收调优知识点整理
目录 1、JVM内存模型 1.2、堆及垃圾回收 1.3、JVM参数设置经验: 1.4、对象逃逸分析:...
linux安装mysql-8.0.31
1)、下载mysql-8.0.31压缩包两种方式 a.本地下载后上传服务器解压,下载地址:https://downloads.mysql.com/archives/community/ b.服务器使用命令下载,注意:路径在那,就下载到那个位置。 wget https://dev.mysql.com/…...
2023 年会是网络安全的关键年吗?
过去 12 个月对网络安全领域和周围的每个人来说再次充满挑战。和往年不同,感觉很不一样,攻击源源不断。过去,大型漏洞每季度发生一次,但在过去一年中,在某些情况下,我们几乎每周都会处理严重漏洞。 已知利…...
【深度强化学习】(1) DQN 模型解析,附Pytorch完整代码
大家好,今天和各位讲解一下深度强化学习中的基础模型 DQN,配合 OpenAI 的 gym 环境,训练模型完成一个小游戏,完整代码可以从我的 GitHub 中获得: https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Mod…...
Nginx服务优化与防盗链
目录 1.隐藏nginx版本号 1.查看版本号 2.隐藏版本信息 2.修改用户与组 3.缓存时间 4.日志分割 5.连接超时 6.更改进程数 7.网页压缩 8.配置防盗链 1.配置web源主机(192.168.156.10 www.lhf.com) 2.配置域名映射关系 3.配置盗链主机 ࿰…...
npm与yarn常用命令
npm npm -v:查看 npm 版本npm init:初始化后会出现一个 Package.json 配置文件,可以在后面加上 -y,快速跳到问答界面npm install:会根据项目中的 package.json 文件自动给下载项目中所需的全部依赖npm insall 包含 --…...
【C++】C++11新特性——右值引用
文章目录一、左值引用、 右值引用1.1 左值与右值1.2 左值引用1.3 右值引用二、右值引用的意义三、移动语句3.1 移动构造3.2 移动赋值3.3 总结四、move问题五、完美转发5.1 万能引用与折叠5.2 完美转发std::forward一、左值引用、 右值引用 1.1 左值与右值 我们经常能听到左值…...
C#基础教程21 正则表达式
文章目录 简介正则表达式语法字符集元字符转义字符量词贪婪匹配和非贪婪匹配正则表达式类Regex类Match方法Matches方法简介 正则表达式是一种描述字符串模式的语言,它可以用来匹配、查找、替换字符串中的模式。在C#中,我们可以使用System.Text.RegularExpressions命名空间下的…...
聚观早报|谷歌发布最大视觉语言模型;王兴投资王慧文ChatGPT项目
今日要闻:谷歌发布全球最大视觉语言模型;马斯克预计Twitter下季度现金流转正;王兴投资王慧文ChatGPT项目;美国拟明年 11 月开展载人绕月飞行;慧与科技宣布收购Athonet谷歌发布全球最大视觉语言模型 近日,来…...
java Spring5 xml配置文件方式实现声明式事务
在java Spring5通过声明式事务(注解方式)完成一个简单的事务操作中 我们通过注解方式完成了一个事务操作 那么 下面 我还是讲一下 基于xml实现声明式事务的操作 其实在开发过程中 大家肯定都喜欢用注解 因为他方便 这篇文章中的xml方式 大家做个了解就好 还是 我们的这张表 记…...
常用存储芯片-笔记本上固态硬盘PTS11系列推荐
在存储领域中,除了存储颗粒之外,还有一种极其重要的芯片:存储控制芯片。存储控制芯片是CPU与存储器之间数据交换的中介,决定了存储器最大容量、存取速度等多个重要参数。特别是在AI、5G、自动驾驶时代,对于数据处理及存…...
【AI绘图学习笔记】奇异值分解(SVD)、主成分分析(PCA)
这节的内容需要一些线性代数基础知识,如果你没听懂本文在讲什么,强烈建议你学习【官方双语/合集】线性代数的本质 - 系列合集 文章目录奇异值分解线性变换特征值和特征向量的几何意义什么是奇异值分解?公式推导SVD推广到任意大小矩阵如何求SV…...
【设计模式】模板方法模式和门面模式
模板方法模式和门面模式模板方法模式代码示例门面模式代码示例门面模式的应用场景模板方法模式 模板方法模式非常简单,就是定义了一个固定的公共流程,整个流程有哪些步骤是事先定义好的,具体的步骤则交由子类去实现。属于行为型设计模式。 简…...
深度解析:HS2-HF Patch如何通过模块化架构彻底重塑游戏体验
深度解析:HS2-HF Patch如何通过模块化架构彻底重塑游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF Patch作为《Honey Select 2》最全…...
喜马拉雅音频下载终极指南:如何永久保存付费专辑到本地
喜马拉雅音频下载终极指南:如何永久保存付费专辑到本地 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 还在为喜马拉雅…...
BurstGPT:大语言模型驱动高性能计算,实现自然语言科学仿真
1. 项目概述:当大语言模型遇上高性能计算最近在AI和HPC(高性能计算)的交叉领域,一个名为BurstGPT的项目引起了我的注意。乍一看这个标题,你可能会觉得有点“缝合怪”的味道——Burst通常指代计算资源的突发式使用或高性…...
HFSS与CST互导实战:5分钟搞定模型转换与数据对比(以微带天线为例)
HFSS与CST互导实战:微带天线模型转换与数据对比指南 在射频工程领域,HFSS和CST作为两大主流电磁仿真工具各有优势。实际项目中经常需要在这两个平台间迁移模型并对比结果,以确保仿真可靠性。本文将手把手演示如何高效完成模型互导与数据验证。…...
为Cursor AI Agent构建专用HTTP客户端:扩展智能体联网能力实战
1. 项目概述:一个为Cursor AI Agent定制的HTTP客户端 如果你和我一样,深度使用Cursor作为日常开发的主力工具,那你肯定对它的“Agent”功能又爱又恨。爱的是,它能理解你的意图,帮你生成代码、重构函数、甚至写测试&…...
排查华为USG防火墙上不了网?先检查这5个配置点(附真实配置案例)
华为USG防火墙上网故障排查实战指南 当内网用户突然无法访问互联网时,作为运维人员往往会面临巨大的压力。华为USG防火墙作为企业网络的核心安全设备,其配置的每一个细节都可能成为网络连通性的关键。本文将从一个真实的故障排查案例出发,带您…...
为什么顶尖投行/律所/药企已将Perplexity设为默认搜索端口?:拆解其底层Provenance Graph引擎与ChatGPT RAG架构的7层信任差
更多请点击: https://intelliparadigm.com 第一章:Perplexity与ChatGPT搜索范式的根本性分野 Perplexity 和 ChatGPT 代表两种截然不同的信息交互哲学:前者以**可验证的溯源驱动**为核心,后者以**生成连贯性优先**为设计原则。这…...
League-Toolkit终极指南:英雄联盟玩家的智能自动化神器
League-Toolkit终极指南:英雄联盟玩家的智能自动化神器 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 如果你是英雄联盟玩家&…...
厘米级实景复刻 全域化镜像感知:自进化时空标定技术加持,筑牢复杂工况视频孪生运行根基
厘米级实景复刻 全域化镜像感知副标题:自进化时空标定技术加持,筑牢复杂工况视频孪生运行根基前言数字孪生技术规模化落地进程中,实景还原精度不足、全域感知连贯性薄弱、复杂工况适配性差成为制约行业发展的核心瓶颈。传统方案受限于静态标定…...
别再复制粘贴了!手把手教你用Simscape Language从零创建自定义物理模块(附完整代码)
从零构建Simscape自定义物理模块:工程师的深度实践指南 在物理系统建模领域,预置的标准化组件库往往无法满足复杂工程场景的需求。当您面对一个特殊的齿轮传动机构、非线性的液压元件或是定制化的传感器模型时,掌握Simscape Language的自定义…...
