详解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 yield使用方法示例
Dec 04 Python
Python编程中的反模式实例分析
Dec 08 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
May 02 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
pandas DataFrame索引行列的实现
Jun 04 Python
详解Python文件修改的两种方式
Aug 22 Python
Django app配置多个数据库代码实例
Dec 17 Python
python装饰器相当于函数的调用方式
Dec 27 Python
Python 实现微信自动回复的方法
Sep 11 Python
Python获取android设备cpu和内存占用情况
Nov 15 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
Python用requests库爬取返回为空的解决办法
Feb 21 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中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
javascript 函数速查表
2010/02/07 Javascript
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
javascript判断图片是否加载完成的方法推荐
2016/05/13 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
Vue2.0父子组件传递函数的教程详解
2017/10/16 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
layui输入框中只允许输入整数的实现方法
2019/09/18 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
python微信撤回监测代码
2019/04/29 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
机械设计制造专业个人求职信
2013/09/25 职场文书
机电一体化专业应届本科生求职信
2013/09/27 职场文书
你懂得怎么写自荐信吗?
2013/12/27 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
后勤工作个人总结
2015/02/28 职场文书
会计出纳岗位职责
2015/03/31 职场文书
签订劳动合同通知书
2015/04/16 职场文书
工作简报怎么写
2015/07/21 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android