详解Django中CBV(Class Base Views)模型源码分析


Posted in Python onFebruary 25, 2019

在view文件中编写一个类,并配置好路由

class Test(View):
 def get(self, request, *args, **kwargs):
 return HttpResponse('cbv_get')

 def post(self, request, *args, **kwargs):
 return HttpResponse('cbv_post')
url(r'test/',views.Test.as_view()),

通过as_view()进入查看源码

详解Django中CBV(Class Base Views)模型源码分析

实际上views.Test.as_view()是存的一个内存地址,加括号被调用,执行了as_view方法里的view方法,具体看下图:

详解Django中CBV(Class Base Views)模型源码分析

核心是dispatch方法,在dispatch方法中完成了分发功能。

详解Django中CBV(Class Base Views)模型源码分析

若要在Test类中自定义dispatch方法,代码如下:

class Test(View):
 def dispatch(self, request, *args, **kwargs):
 # 加代码
 obj = super().dispatch(self, request, *args, **kwargs)
 # 加代码
 # 实现了一个类似装饰器的效果,比如post请求,如果是json,手动从request里body取出来 再转一下
 # 或者走的时候加点cookie
 return obj
 
 def get(self, request, *args, **kwargs):
 return HttpResponse('cbv_get')

 def post(self, request, *args, **kwargs):
 return HttpResponse('cbv_post')

流程总结:

CBV模型

  • 在views中写一个类,继承View,里面写get方法,post方法
  • 在路由中配置: url(r'^test/', views.Test.as_view()),实际上第二个参数位置,放的还是一个函数内存地址
  • 当请求来了,就会执行第二个参数(request,参数),本质上执行view()
  • view内部调用了dispatch()方法
  • dispatch分发方法,根据请求方式不同,执行的方法不同

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python连接sql server乱码的解决方法
Jan 28 Python
一个基于flask的web应用诞生 组织结构调整(7)
Apr 11 Python
Windows下安装Django框架的方法简明教程
Mar 28 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
python实现按行分割文件
Jul 22 Python
对Python获取屏幕截图的4种方法详解
Aug 27 Python
Python使用matplotlib绘制三维参数曲线操作示例
Sep 10 Python
python基于FTP实现文件传输相关功能代码实例
Sep 28 Python
Python 3.8正式发布,来尝鲜这些新特性吧
Oct 15 Python
Python将字典转换为XML的方法
Aug 01 Python
python palywright库基本使用
Jan 21 Python
python3中apply函数和lambda函数的使用详解
Feb 28 Python
Python判断对象是否相等及eq函数的讲解
Feb 25 #Python
详解django中url路由配置及渲染方式
Feb 25 #Python
利用python脚本如何简化jar操作命令
Feb 24 #Python
Python中如何使用if语句处理列表实例代码
Feb 24 #Python
python实现两张图片的像素融合
Feb 23 #Python
Python判断有效的数独算法示例
Feb 23 #Python
Python实现的旋转数组功能算法示例
Feb 23 #Python
You might like
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
php+mysql实现无限级分类
2015/11/11 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
PHP simplexml_load_file()函数讲解
2019/02/03 PHP
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
2011/06/08 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
python实现括号匹配的思路详解
2018/08/23 Python
python 字符串追加实例
2019/07/20 Python
Django框架表单操作实例分析
2019/11/04 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
自我鉴定注意事项
2014/01/19 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
阳光体育活动实施方案
2014/05/25 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
学校少先队工作总结
2015/08/12 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
Docker部署Mysql8的实现步骤
2022/07/07 Servers