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 相关文章推荐
go语言计算两个时间的时间差方法
Mar 13 Python
对PyTorch torch.stack的实例讲解
Jul 30 Python
pycharm的console输入实现换行的方法
Jan 16 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
简单了解Python生成器是什么
Jul 02 Python
Python 分享10个PyCharm技巧
Jul 13 Python
Python流程控制常用工具详解
Feb 24 Python
python查询MySQL将数据写入Excel
Oct 29 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
浅谈Python 中的复数问题
May 19 Python
用python基于appium模块开发一个自动收取能量的小助手
Sep 25 Python
利用Python多线程实现图片下载器
Mar 25 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
用PHP4访问Oracle815
2006/10/09 PHP
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
js中实现继承的五种方法
2021/01/25 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
营销人才自我鉴定范文
2013/12/25 职场文书
教师党性分析材料
2014/02/04 职场文书
《月亮湾》教学反思
2014/04/14 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
小学生学习保证书
2015/02/26 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书