详解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的Django框架中的Context使用
Jul 15 Python
python运行时间的几种方法
Jun 17 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
Python3匿名函数用法示例
Jul 25 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
python cumsum函数的具体使用
Jul 29 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
在pycharm中配置Anaconda以及pip源配置详解
Sep 09 Python
使用python绘制温度变化雷达图
Oct 18 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
pytorch 数据处理:定义自己的数据集合实例
Dec 31 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使用glob函数遍历文件和目录详解
2016/09/23 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
Python对List中的元素排序的方法
2018/04/01 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
python把一个字符串切开的实例方法
2020/09/27 Python
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
小学毕业家长寄语
2014/01/19 职场文书
军校大学生个人的自我评价
2014/02/17 职场文书
农业局学习党的群众路线教育实践活动心得体会
2014/03/07 职场文书
设计师求职信模板
2014/05/06 职场文书
团日活动总结书格式
2014/05/08 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
新农村建设汇报材料
2014/08/15 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
护士年终考核评语
2014/12/31 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
2016教师六五普法学习心得体会
2016/01/21 职场文书