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实现的扫雷游戏实例代码
Aug 01 Python
python的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
Python中的Django基本命令实例详解
Jul 15 Python
Django csrf 两种方法设置form的实例
Feb 03 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
python实现列表的排序方法分享
Jul 01 Python
elasticsearch python 查询的两种方法
Aug 04 Python
opencv3/C++实现视频背景去除建模(BSM)
Dec 11 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
python实现学生管理系统开发
Jul 24 Python
Python使用xpath实现图片爬取
Sep 16 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
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
javascript 鼠标滚轮事件
2009/04/09 Javascript
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
vue中的适配px2rem示例代码
2018/11/19 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
python实现TF-IDF算法解析
2018/01/02 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
python 文件查找及内容匹配方法
2018/10/25 Python
Python爬虫将爬取的图片写入world文档的方法
2018/11/07 Python
python如何实现异步调用函数执行
2019/07/08 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
css3实现椭圆轨迹旋转的示例代码
2018/10/29 HTML / CSS
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
四年级科学教学反思
2014/02/10 职场文书
销售总经理岗位职责
2014/03/15 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
辩论会主持词
2015/07/03 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
周一问候语大全
2015/11/10 职场文书
青少年法制教育心得体会
2016/01/14 职场文书