详解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使用cookie库操保存cookie详解
Mar 03 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
Python实现中一次读取多个值的方法
Apr 22 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
flask框架单元测试原理与用法实例分析
Jul 23 Python
深入了解python中元类的相关知识
Aug 29 Python
Python表达式的优先级详解
Feb 18 Python
python怎么调用自己的函数
Jul 01 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
Pycharm常用快捷键总结及配置方法
Nov 14 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创建多级目录代码
2008/06/05 PHP
允许phpmyadmin空密码登录的配置方法
2011/05/29 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
php实现微信支付之现金红包
2018/05/30 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
js常用排序实现代码
2010/12/28 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
Python如何实现文本转语音
2016/08/08 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
python 变量初始化空列表的例子
2019/11/28 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
精选奢华:THE LIST
2019/09/05 全球购物
大四自我鉴定范文
2013/10/06 职场文书
施工人员岗位职责
2013/12/12 职场文书
全国道德模范事迹
2014/02/01 职场文书
大型会议接待方案
2014/03/01 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
python ConfigParser库的使用及遇到的坑
2022/02/12 Python