详解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框架中TEMPLATES项的设置教程
May 29 Python
python中函数传参详解
Jul 03 Python
利用Python实现Windows定时关机功能
Mar 21 Python
Django框架实现逆向解析url的方法
Jul 04 Python
Django中的Model操作表的实现
Jul 24 Python
基于tensorflow加载部分层的方法
Jul 26 Python
python 拼接文件路径的方法
Oct 23 Python
对numpy中数组转置的求解以及向量内积计算方法
Oct 31 Python
python怎么自定义捕获错误
Jun 29 Python
python 识别登录验证码图片功能的实现代码(完整代码)
Jul 03 Python
关于python中导入文件到list的问题
Oct 31 Python
python switch 实现多分支选择功能
Dec 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创建PDF中文文档
2006/10/09 PHP
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
php格式化日期实例分析
2014/11/12 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
深入理解PHP+Mysql分布式事务与解决方案
2020/12/03 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
vue router学习之动态路由和嵌套路由详解
2017/09/21 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
layui表格数据重载
2019/07/27 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
用Python写一个无界面的2048小游戏
2016/05/24 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
Python中内建模块collections如何使用
2020/05/27 Python
毕业生就业自荐信
2013/12/04 职场文书
趣味体育活动方案
2014/02/08 职场文书
纪委立案决定书
2015/06/24 职场文书
大学军训通讯稿
2015/07/18 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript