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实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 Python
Flask数据库迁移简单介绍
Oct 24 Python
python+mongodb数据抓取详细介绍
Oct 25 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
Jan 15 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
分享vim python缩进等一些配置
Jul 02 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
python 批量解压压缩文件的实例代码
Jun 27 Python
python画图把时间作为横坐标的方法
Jul 07 Python
Django之使用celery和NGINX生成静态页面实现性能优化
Oct 08 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
django 外键创建注意事项说明
May 20 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
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
JS加ASP二级域名转向的代码
2007/05/17 Javascript
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
Extjs 点击复选框在表格中增加相关信息行
2016/07/12 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
Vue自定义过滤器格式化数字三位加一逗号实现代码
2018/03/23 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
Python网站验证码识别
2016/01/25 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
医药大学生求职简历的自我评价
2013/10/17 职场文书
财务人员个人求职信范文
2013/12/04 职场文书
领导调研接待方案
2014/02/27 职场文书
民族精神月活动总结
2014/08/28 职场文书
领导干部保密承诺书
2014/08/30 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
2015年推普周活动总结
2015/03/27 职场文书
保险公司增员口号
2015/12/25 职场文书
关于做家务的心得体会
2016/01/23 职场文书