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 变量类型及命名规则介绍
Jun 08 Python
使用Python抓取模板之家的CSS模板
Mar 16 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
May 21 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
python list转矩阵的实例讲解
Aug 04 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
Django import export实现数据库导入导出方式
Apr 03 Python
jupyter notebook清除输出方式
Apr 10 Python
Python用5行代码实现批量抠图的示例代码
Apr 14 Python
python进度条显示之tqmd模块
Aug 22 Python
详解非极大值抑制算法之Python实现
Jun 28 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
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
js 遍历对象的属性的代码
2011/12/29 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
简单学习vue指令directive
2016/11/03 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
jQuery仿IOS弹出框插件
2017/02/18 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
2018/06/19 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
有兼职工作经历的简历自我评价
2014/03/07 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
商场主管竞聘书
2014/03/31 职场文书
法制报告会主持词
2014/04/02 职场文书
投资意向书
2014/07/30 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
升学宴祝酒词
2015/08/11 职场文书
导游词之包公祠
2019/11/25 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
Python合并pdf文件的工具
2021/07/01 Python
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL