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实现模拟按键,自动翻页看u17漫画
Mar 17 Python
解决python使用open打开文件中文乱码的问题
Dec 29 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
python读取xlsx的方法
Dec 25 Python
python获取本机所有IP地址的方法
Dec 26 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
python模拟点击玩游戏的实例讲解
Nov 26 Python
使用Python的开发框架Brownie部署以太坊智能合约
May 28 Python
Python中的np.argmin()和np.argmax()函数用法
Jun 02 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 24 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开发工具之vs2005图解
2008/01/12 PHP
由php的call_user_func传reference引发的思考
2010/07/23 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
PHP常见错误提示含义解释(实用!值得收藏)
2016/04/25 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
python实现超简单的视频对象提取功能
2018/06/04 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
为什么python比较流行
2020/06/19 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
请用用Java代码写一个堆栈
2012/01/26 面试题
女大学生毕业找工作的自我评价
2013/10/03 职场文书
交通事故协议书范文
2014/04/16 职场文书
医院护士工作检讨书
2014/10/26 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android