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入门篇之条件、循环
Oct 17 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
Django后台获取前端post上传的文件方法
May 28 Python
在python中对变量判断是否为None的三种方法总结
Jan 23 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
pip 安装库比较慢的解决方法(国内镜像)
Oct 06 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
Dec 04 Python
tensorflow 获取所有variable或tensor的name示例
Jan 04 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
django 取消csrf限制的实例
Mar 13 Python
matplotlib jupyter notebook 图像可视化 plt show操作
Apr 24 Python
如何向scrapy中的spider传递参数的几种方法
Nov 18 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之Smarty模板使用方法示例详解
2014/07/08 PHP
微信自定义分享php代码分析
2016/11/24 PHP
YUI Compressor压缩JavaScript原理及微优化
2013/01/07 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
JavaScript事件对象深入详解
2018/12/30 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
python django集成cas验证系统
2014/07/14 Python
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
pycham查看程序执行的时间方法
2018/11/29 Python
Python reduce函数作用及实例解析
2020/05/08 Python
Python绘制组合图的示例
2020/09/18 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
Java编程面试题
2016/04/04 面试题
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
招聘专员岗位职责
2014/03/07 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
2014年信用社工作总结
2014/11/25 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
团结主题班会
2015/08/13 职场文书
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python