详解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的迭代器与生成器实例详解
Jul 16 Python
Python写的一个简单监控系统
Jun 19 Python
node.js获取参数的常用方法(总结)
May 29 Python
微信跳一跳python自动代码解读1.0
Jan 12 Python
python爬虫获取多页天涯帖子
Feb 23 Python
Python OS模块实例详解
Apr 15 Python
Python 3 判断2个字典相同
Aug 06 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
Jul 14 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 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网页标题中文乱码的有效解决方法
2014/03/05 PHP
PHP实现递归无限级分类
2015/10/22 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
2016/06/09 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
基于jQuery拖拽事件的封装
2020/11/29 jQuery
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
Python读取Excel的方法实例分析
2015/07/11 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
Python的垃圾回收机制详解
2019/08/28 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
信息技术专业个人自我评价
2013/12/11 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
2019教师的学习计划
2019/06/25 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL