Django CBV模型源码运行流程详解


Posted in Python onAugust 17, 2020

在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模型源码运行流程详解

实际上views.Test.as_view()是存的一个内存地址,加括号被调用,执行了as_view方法里的view方法,具体看下图:

Django CBV模型源码运行流程详解

核心是dispatch方法,在dispatch方法中完成了分发功能。

Django CBV模型源码运行流程详解

若要在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 21 Python
python列表操作使用示例分享
Feb 21 Python
Python多线程和队列操作实例
Jun 21 Python
python中将一个全部为int的list 转化为str的list方法
Apr 09 Python
Python利用公共键如何对字典列表进行排序详解
May 19 Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 Python
Python3.5实现的罗马数字转换成整数功能示例
Feb 25 Python
关于tensorflow的几种参数初始化方法小结
Jan 04 Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 Python
Python 实现一行输入多个数字(用空格隔开)
Apr 29 Python
深入浅析Python代码规范性检测
Jul 31 Python
Python 中数组和数字相乘时的注意事项说明
May 10 Python
无惧面试,带你搞懂python 装饰器
Aug 17 #Python
Python Request类源码实现方法及原理解析
Aug 17 #Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 #Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 #Python
Django DRF认证组件流程实现原理详解
Aug 17 #Python
python使用建议与技巧分享(二)
Aug 17 #Python
详解python方法之绑定方法与非绑定方法
Aug 17 #Python
You might like
巧用php中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
ucenter通信原理分析
2015/01/09 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
2011/06/02 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
python日志logging模块使用方法分析
2019/05/23 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
关于教师节的演讲稿
2014/09/04 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
预备党员转正材料
2014/12/19 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
谢师宴家长致辞
2015/07/27 职场文书
员工聘用合同范本
2015/09/21 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS