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比较2个xml内容的方法
May 11 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
浅谈Python中列表生成式和生成器的区别
Aug 03 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
python 用for循环实现1~n求和的实例
Feb 01 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
May 29 Python
详解python os.path.exists判断文件或文件夹是否存在
Nov 16 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
Dec 17 Python
pytorch中Schedule与warmup_steps的用法说明
May 24 Python
Python docx库删除复制paragraph及行高设置图片插入示例
Jul 23 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判断服务器是否是HTTPS连接
2013/07/05 PHP
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
javascript封装的sqlite操作类实例
2015/07/17 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
Python处理session的方法整理
2019/08/29 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
软件测试面试题
2015/10/21 面试题
财务部岗位职责
2013/11/19 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
公务员年度考核评语
2014/12/31 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
2015年大学迎新工作总结
2015/07/16 职场文书
2016年元旦致辞
2015/08/01 职场文书
nginx搭建图片服务器的过程详解(root和alias的区别)
2021/03/31 Servers
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android