详解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实现向QQ群成员自动发邮件的方法
Nov 19 Python
使用Python脚本来控制Windows Azure的简单教程
Apr 16 Python
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 Python
Python操作多维数组输出和矩阵运算示例
Nov 28 Python
解决python 执行sql语句时所传参数含有单引号的问题
Jun 06 Python
利用python爬取有道词典的方法
Dec 08 Python
详解pytorch创建tensor函数
Mar 22 Python
进行数据处理的6个 Python 代码块分享
Apr 06 Python
python创建字典及相关管理操作
Apr 13 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
joomla内置的表单验证功能使用方法
2010/06/11 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
jquery实现心算练习代码
2010/12/06 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
基于replaceChild制作简单的吞噬特效
2015/09/21 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
python实现requests发送/上传多个文件的示例
2018/06/04 Python
python 多线程将大文件分开下载后在合并的实例
2018/11/09 Python
python事件驱动event实现详解
2018/11/21 Python
python字符串查找函数的用法详解
2019/07/08 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python