详解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 相关文章推荐
Python3搜索及替换文件中文本的方法
May 22 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
简单实现python数独游戏
Mar 30 Python
python获取中文字符串长度的方法
Nov 14 Python
python简单验证码识别的实现方法
May 10 Python
Dlib+OpenCV深度学习人脸识别的方法示例
May 14 Python
python调用支付宝支付接口流程
Aug 15 Python
python 三元运算符使用解析
Sep 16 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
python字符串替换re.sub()实例解析
Feb 09 Python
如何理解python面向对象编程
Jun 01 Python
如何用python识别滑块验证码中的缺口
Apr 01 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
用mysql内存表来代替php session的类
2009/02/01 PHP
php基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
php实现可运算的验证码
2015/11/10 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
jquery退出each循环的写法
2014/02/26 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
Python实现中值滤波去噪方式
2019/12/18 Python
Python验证码截取识别代码实例
2020/05/16 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
结构工程个人自荐信范文
2013/11/30 职场文书
机房搬迁方案
2014/05/01 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
go原生库的中bytes.Buffer用法
2021/04/25 Golang
《废话连篇——致新手》——chinapizza
2022/04/05 无线电