Django 视图探秘:FBV与CBV注册方式的异同,揭秘as_view()的执行魔法

在这里插入图片描述


文章目录

  • 一、FBV、CBV注册方式及其区别
    • FBV
    • CBV
  • 二、as_view()函数
    • 查看对应的view函数具体内容,最终返回的是dispatch方法
    • 查看dispatch方法


一、FBV、CBV注册方式及其区别

FBV

FBV:path('index/',views.index)
通过调用函数方式,views.index是一个普通函数
路由分发,匹配到对应的路由后,会调用上面的index方法

CBV

​ CBV: path('login/',LoginView.as_view())
通过继承Django的View类来实现
​路由分发,匹配到对应的路由后,会调用上面的LoginView.as_view()方法,

二、as_view()函数

在这里插入图片描述

查看对应的view函数具体内容,最终返回的是dispatch方法

在这里插入图片描述

查看dispatch方法

在这里插入图片描述

图中翻译:

Try to dispatch to the right method; if a method doesn’t exist,the error handler. Also defer to the error handler if the request method isn’t on the approved list.

翻译:尽量用正确的方法调度;如果一个方法不存在,则返回错误处理程序。如果请求方法不在批准的列表中,也要服从错误处理程序。

图中代码解释:
request.method.lower()就是把请求方式改成小写(例如get请求方式),request.method就是请求方式,lower()就是改成小写

http_method_names:
在这里插入图片描述
getattr() :

getattr() 函数在Python中用于从对象中获取指定属性的值。
语法是getattr(对象, 属性, 默认值)
对象 是要从中获取属性值的对象。
属性 是要获取其值的属性的名称。
默认值(可选)是在属性不存在时要返回的值(如果不提供,则会引发 AttributeError)。

所以这里代码的意思就是if判断request.method.lower()请求的方法在 self.http_method_names:里面的话,就执行 getattr方法,self就是我们一开始定义的LoginView类对象,所以这里的

 handler =getattr( self, request.method.lower(),self.http_method_not_allowed )

的意思就是(注意:假设这里请求的是get方式):把LoginView.get(注意:不存在就会执行self.http_method_not_allowed 方法)赋值给handler,最后通过

return handler(request, *args, **kwargs)

返回并且执行LoginView.get方法,刚开始赋值给handler的时候并没有执行.get方法,是最后return handler(request, *args, **kwargs)相当于LoginView.get+()加了个括号才算是执行的这个方法


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/680038.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

打印机扫描工具V2.1发布

打印机扫描工具V2.1发布 从打印机扫描工具发布1.4版本以来,大家反馈了一些问题,目前就比较集中的问题,做了一些优化,做了一些大的调整,发布了2.1版本。 优化问题: 进一步优化安装包太大问题,…

上海亚商投顾:深成指、创业板指均涨超1%,电力股午后集体走强

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日低开后震荡反弹,深成指、创业板指均涨超1%,黄白二线依旧分化。电力、电网股午…

CHATGPT升级plus(已有账号前提下)

注册wildcard(虚拟卡) 注册号账号后先进行充值,充值后选择CHATGPT一键升级按照他的流程来即可 Wildcard网址:Wildcard跳转注册 填写邀请码充值时少两美金合计14¥ 邀请码:OL3QXTRH

挑战你的数据结构技能:复习题来袭【6】

1. (单选题)设无向图的顶点个数为n,则该图最多有()条边 A. n-1 B. n(n-1)/2 C. n(n1)/2 D. 0 答案:B 分析: 2. (单选题)含有n个顶点的连通无向图,其边的个数至少为()。 A. n-1 B. n C. n1 D. nlog2n 答案:A…

10 数据封装与层次对应关系

一、TCP/IP模型 二、封装与解封装 (一)数据的封装 (二)数据的解封装 三、协议、数据与设备 (一)对应层次协议 结构协议应用层HTTP / FTP / TFTP / SMTP / SNMP/ DNS传输层TCP / UDP网络层ICMP / IGMP / …

使用记事本或者写字板打开中文乱码问题

最近下载一个开源的公共的文件,下载下来是xml格式的文本文件,然后我尝试打开,使用记事本打开文件,内容显示正常,但是因为是xml文件,使用记事本打开的时候没有换行,不方便看,然后就使…

信息系统项目管理师0143:过程概述(9项目范围管理—9.2项目范围管理过程—9.2.1过程概述)

点击查看专栏目录 文章目录 9.2 项目范围管理过程9.2.1 过程概述 9.2 项目范围管理过程 9.2.1 过程概述 项目范围管理过程包括: 规划范围管理:为了记录如何定义、确认和控制项目范围及产品范围,创建范围管理计划。收集需求:为了…

文章自动排版

文字太多了不想看怎么办?想快速提取并罗列文章的重点要如何操作?今天给大家介绍一下如何把复杂的文章总结为一个个观点 使用说明 打开智游剪辑(zyjj.cc),搜索文字排版 我们输入要排版的文章,点击立即生成就…

心链9----组队功能开发以及请求参数包装类和包装类实现

心链 — 伙伴匹配系统 组队功能开发 需求分析 理想的应用场景 我要跟别人一起参加竞赛或者做项目,可以发起队伍或者加入别人的队伍 用户可以 创建 一个队伍,设置队伍的人数、队伍名称(标题)、描述、超时时间 P0 队长、剩余的人数…

安防综合管理系统EasyCVR视频汇聚平台GA/T 1400协议中的关键消息交互示例

在当今的信息化时代,公共安全防范日益成为保障社会和谐稳定的关键。视频监控系统作为现代安全防范的重要手段,正不断在公安、交通、城市管理等领域发挥着越来越重要的作用。而GA/T 1400协议视图库,作为公安视频图像信息应用系统的标准&#x…

使用 TinyEngine 低代码引擎实现三方物料集成

本文由体验技术团队 TinyEngine 项目成员炽凌创作,欢迎大家实操体验,本体验内容基于 TinyEngine 低代码引擎提供的环境,介绍了如何通过 TinyEngine 低代码引擎实现三方物料集成,帮助开发者快速开发。 知识背景 1.1 TinyEngine 低…

江苏省汽车及零部件产业协作配套对接会在苏州举行

5月28日,江苏省汽车及零部件产业协作配套对接会暨“百场万企”大中小企业融通对接活动在苏州举办。本次活动以“深化整零协作,促进大中小企业融通发展”为主题,由江苏省工业和信息化厅、中国中检所属中国汽车工程研究院股份有限公司&#xff…

Linux系统Docker部署Apache Superset并实现远程访问详细流程

目录 前言 1. 使用Docker部署Apache Superset 1.1 第一步安装docker 、docker compose 1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透,实现公网访问 3. 设置固定连接公网地址 前言 作者简介: 懒大王敲代码&#xff0…

Python第二语言(一、Python start)

目录 1、下载Pyhton注意 2、python下载 3、Python start 3.1 第一个python(print("Hello World!")) 3.2 执行多条python代码(Python解释器) 3.3 小结(python解释器、.py文件) 3.4 开发工具…

Java微服务智慧工地可视化SaaS云解决方案源码

智慧工地是指运用信息化手段,围绕施工过程管理,建立互联协同、智能生产、科学管理的施工项目信息化生态圈,并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析,提供过程趋势预测及专家预案,实现工程…

计算机基础(8)——音频数字化(模电与数电)

💗计算机基础系列文章💗 👉🍀计算机基础(1)——计算机的发展史🍀👉🍀计算机基础(2)——冯诺依曼体系结构🍀👉&#x1f34…

Springboot 开发-- 集成 Activiti 7 流程引擎

引言 Activiti 7是一款遵循BPMN 2.0标准的开源工作流引擎,旨在为企业提供灵活、可扩展的流程管理功能。它支持图形化的流程设计、丰富的API接口、强大的执行引擎和完善的监控报表,帮助企业实现业务流程的自动化、规范化和智能化。本文将为您详细介绍 Ac…

Spring使用事务的两种方式

1. 为什么需要事务? 前面的博客 对MySQL事务作讲解,事务就是将⼀组操作封装成⼀个执⾏单元(封装到⼀起),要么全部成功,要么全部失败。 比如,现在要实现转账操作: 第一步&#xff…

【Python】 Python 中的整数递增:深入理解 `+=` 运算符

基本原理 在 Python 中,整数递增通常指的是将一个整数的值增加一个固定的量,这通常是 1。虽然 Python 没有像 C 或 Java 那样的 运算符,但我们可以使用 运算符来实现相同的功能。 是一个赋值运算符,它将右侧表达式的值加到左侧…

用PlantUML描绘C++世界:通过文本描述精准控制UML图的生成

往期本博主的 C 精讲优质博文可通过这篇导航进行查找: Lemo 的C精华博文导航:进阶、精讲、设计模式文章全收录 前言 在编写程序时,可视化的工具可以极大地帮助我们理解和设计复杂的系统。对于C程序员来说,一个强大的工具是UML&am…