详解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基础教程之实现石头剪刀布游戏示例
Feb 11 Python
Python中使用不同编码读写txt文件详解
May 28 Python
Python+django实现文件上传
Jan 17 Python
Python实现网站注册验证码生成类
Jun 08 Python
python实现百度语音识别api
Apr 10 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
Python更改pip镜像源的方法示例
Dec 01 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
Python 实现一个简单的web服务器
Jan 03 Python
PyQt5实现多张图片显示并滚动
Jun 11 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学习之PHP表达式
2006/10/09 PHP
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
JQuery 入门实例1
2009/06/25 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
JavaScript 高效运行代码分析
2010/03/18 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
解读ES6中class关键字
2017/11/20 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
大学自荐信
2013/12/12 职场文书
料理师求职信
2014/01/30 职场文书
公司周年庆典标语
2014/10/07 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
《打电话》教学反思
2016/02/22 职场文书
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android
Nginx配置https的实现
2021/11/27 Servers