详解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时间整形转标准格式的示例分享
Feb 14 Python
python实现BackPropagation算法
Dec 14 Python
使用Python+Splinter自动刷新抢12306火车票
Jan 03 Python
Python操作json的方法实例分析
Dec 06 Python
python print输出延时,让其立刻输出的方法
Jan 07 Python
python 函数中的内置函数及用法详解
Jul 02 Python
Django中的用户身份验证示例详解
Aug 07 Python
python字典key不能是可以是啥类型
Aug 04 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
用Python爬虫破解滑动验证码的案例解析
May 06 Python
教你使用一行Python代码玩遍童年的小游戏
Aug 23 Python
分享几种python 变量合并方法
Mar 20 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 和 XML: 使用expat函数(一)
2006/10/09 PHP
Admin generator, filters and I18n
2011/10/06 PHP
php 操作符与控制结构
2012/03/07 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
PHP微信红包API接口
2015/12/05 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
eval的两组性能测试数据
2012/08/17 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
详解Vue.js入门环境搭建
2017/03/17 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
[01:16:16]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第二场 1月8日
2021/03/11 DOTA
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
FitFlop澳大利亚官网:英国符合人体工学的鞋类品牌
2017/06/05 全球购物
法人身份证明书
2014/10/08 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
英文版辞职信
2015/02/28 职场文书
2015年司机工作总结
2015/04/23 职场文书
活着观后感
2015/06/03 职场文书
Go 在 MongoDB 中常用查询与修改的操作
2021/05/07 Golang
Ajax实现异步加载数据
2021/11/17 Javascript
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技