详解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中使用pprint函数进行格式化输出的教程
Apr 07 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
儿童python练习实例
May 27 Python
Django 用户认证组件使用详解
Jul 23 Python
在python中用url_for构造URL的方法
Jul 25 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
基于Python+QT的gui程序开发实现
Jul 03 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
Jan 05 Python
python如何进行基准测试
Apr 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简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
jQuery+AJAX实现无刷新下拉加载更多
2015/07/03 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
详解JavaScript 的变量
2019/03/08 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
Python实现一个简单的MySQL类
2015/01/07 Python
详解Python中for循环是如何工作的
2017/06/30 Python
python中模块的__all__属性详解
2017/10/26 Python
python @classmethod 的使用场合详解
2019/08/23 Python
Python上下文管理器全实例详解
2019/11/12 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
Python 日期与时间转换的方法
2020/08/01 Python
快速一键生成Python爬虫请求头
2021/03/04 Python
分布式数据库需要考虑哪些问题
2013/12/08 面试题
销售2014年度工作总结
2014/12/08 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
Python实战之疫苗研发情况可视化
2021/05/18 Python
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技