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

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

一、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+()加了个括号才算是执行的这个方法


相关文章
|
1月前
|
数据采集 存储 数据可视化
基于python django的智联招聘数据采集与分析系统,有登录注册,可自主选择采集内容
本文介绍了一个基于Python Django框架的智联招聘数据采集与分析系统,该系统具备登录注册功能,允许用户自主选择采集内容,并通过对数据的分析和可视化展示,帮助企业和招聘者优化招聘策略。
基于python django的智联招聘数据采集与分析系统,有登录注册,可自主选择采集内容
|
1月前
|
数据采集 数据可视化 数据挖掘
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
本文介绍了一个基于Python和Django框架,使用Scrapy进行去哪儿网数据采集与分析的项目,包括实现登录注册功能、MD5加密以及通过可视化大屏展示分析结果的综合系统。
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
|
1月前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
45 2
|
1月前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
14 1
|
14天前
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
28天前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
14 0
|
1月前
|
Linux Shell 数据库
python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装、基本命令、视图与网站
|
1月前
|
存储 数据库 数据安全/隐私保护
Python Django的学生选课管理系统,实现多用户登录注册,可选课可评课
本文介绍了一个基于Python Django框架开发的多功能学生选课管理系统,该系统具备教师和学生两个角色的权限管理,支持课程管理、成绩录入、选课申请、成绩查询和个人信息管理等功能,并注重数据安全与隐私保护。
Python Django的学生选课管理系统,实现多用户登录注册,可选课可评课
|
1月前
|
数据采集 数据可视化 前端开发
基于python django的当当网书籍数据采集与可视化分析,实现数据采集与可视化分析,有登录注册和后台管理
本文介绍了一个基于Python和Django框架的当当网书籍数据采集与可视化分析项目,该项目实现了数据采集、用户登录注册、后台管理,并利用数据清洗、分析和可视化技术在前端展示分析结果。
基于python django的当当网书籍数据采集与可视化分析,实现数据采集与可视化分析,有登录注册和后台管理
|
1月前
|
安全 API Python
Django 如何使用视图动态输出 CSV 以及 PDF
Django 如何使用视图动态输出 CSV 以及 PDF
39 4