1.我们都知道WSGI是一个规范,规范了server和application之间通信的一些约束,server端在监听到请求之后,会把请求转给application去处理,他们之间关联起来的桥梁是一个env变量和一个start_response的回调函数,env用来初始化application的request请求,start_response方法用来将response返回给server。
2.每一个application都要实现一个__call__方法接收两个参数(environ, start_response),__call__方法执行server传过来的每一个请求,获取response的方法是 self.get_response(request), request是一个WSGIRequest的实例,这个WSGIRequest的实例在生成的时间传入一个参数 environ,根据environ生成一个request的实例,这个实例会根据environ的信息初始化request的基本信息。如下图:
3.get_response方法具体做了哪些事情?
先去循环执行没一个middleware的process_request方法,如果有返回值,则直接跳出循环,如果没有返回值,则依次执行url,view, callback, (这些是干啥的我暂时还没看),最后如果response有render方法,则执行template_response_middlerware的渲染方法并且执行response的render方法,详情可见下图:
然后执行回调函数start_response(status, response_headers),最后返回response:
学习技术交流群:226704167,愿和各位一起进步!

转载于:https://www.cnblogs.com/lip0121/p/7514261.html

django源码解析一(请求处理流程)相关推荐

  1. Retrofit2源码解析——网络调用流程(下)

    Retrofit2源码解析系列 Retrofit2源码解析(一) Retrofit2源码解析--网络调用流程(上) 本文基于Retrofit2的2.4.0版本 implementation 'com. ...

  2. android 输入法如何启动流程_android输入法02:openwnn源码解析01—输入流程

    android 输入法 02:openwnn 源码解析 01-输入流程 之后要开始 android 日文输入法的测试,因此现在开始研究 android 输入法.之前两 篇文章已经对 android 自 ...

  3. Django源码解析:preserved_filters的实现

    Django的Admin是以Model为驱动的数据管理系统,他会根据你所定义的Model自动为你生成数据的基础管理介面,从而快速的实现数据的CRUD操作,同时其也提供了相当强大的扩展性,使你可以根据需 ...

  4. 【ceph】CEPH源码解析:读写流程

    相同过程 Ceph的读/写操作采用Primary-Replica模型,客户端只向Object所对应OSD set的Primary OSD发起读/写请求,这保证了数据的强一致性.当Primary OSD ...

  5. Ceph源码解析:读写流程

    一.OSD模块简介 1.1 消息封装:在OSD上发送和接收信息. cluster_messenger -与其它OSDs和monitors沟通 client_messenger -与客户端沟通 1.2 ...

  6. Glide源码解析-加载流程

    1 引言 一直想要阅读Glide源码,但是苦于时间和功力都不够,总是断断续续的,趁着现在有一些空暇时间,来简要分析Glide的源码.Glide的实现太过复杂,不可能做到面面俱到,如果每一行都细致分析, ...

  7. 3.MyBatis源码解析-CRUD执行流程--阿呆中二

    CRUD执行流程 MyBatis CRUD执行流程 与我联系 MyBatis 本文是对mybatis 3.x源码深度解析与最佳实践学习的总结,包括XML文件解析流程.SqlSession构建流程.CR ...

  8. 2.MyBatis源码解析-SqlSession构建流程--阿呆中二

    SqlSession构建流程 MyBatis SqlSession构建流程 与我联系 MyBatis 本文是对mybatis 3.x源码深度解析与最佳实践学习的总结,包括XML文件解析流程.SqlSe ...

  9. Android源码解析:UI绘制流程之控件绘制

    带着问题看源码 再接再厉,我们来分析UI绘制流程最后一步绘制流程 入口ViewRootImpl.performDraw()方法 private void performDraw() {//...try ...

最新文章

  1. redis哨兵机制在集群中的应用
  2. 探讨一下Java单例设计模式
  3. 【小安翻唱】凉宫春日的忧郁--冒険でしょでしょ第五届外语歌曲大赛助兴节目~绫魂论坛送aya的生日礼物筹备开始~...
  4. 软件需求规格说明书通用模版_通用需求挑战和机遇
  5. Centos7 查看/关闭/启动防火墙
  6. Android Studio优秀插件汇总
  7. arcgis交通可达性分析步骤_【规划广角】街道慢行品质的多维度评价与导控策略——基于多源城市数据的整合分析...
  8. python视频人脸识别教程_Python学习笔记之视频人脸检测识别实例教程
  9. 我们精心整理的2019最新全栈资料!首次公布
  10. 海康摄像头激活时报 错误2105
  11. 毕业设计:基于SSM框架的学生实习管理系统
  12. 电信光猫改桥接还在苦苦破解超级密码吗?
  13. 白话大数据 | 从买菜这件小事来聊聊数据仓库
  14. 记录一下中移物联网的一面(方向:前端开发)
  15. tableau 和sfdc连携提取数据时,发现数据提取出错误或不能全部提取数据。
  16. 什么是预付卡及预付卡发展前景
  17. Servlet的安全(第十三篇)
  18. 计算机网络——网络层路由协议、IP组播、移动 IP、路由器
  19. 计算机应用词汇,计算机应用常用英语词汇 1
  20. parsec-3.0 安装报错(__mbstate_t)

热门文章

  1. Mybatis XML文件的异常
  2. 字符串的截取和替换常用方法
  3. 电子工程师必须知道的10个网站 !!!
  4. h3c 3600 交换机配置Telnet登录
  5. Nginx之https配置
  6. EasyNVR摄像机网页直播中,推流组件EasyRTMP推送RTMP扩展支持HEVC(H.265)的方案
  7. JS实现图片放大查看
  8. ALSA声卡笔记3--ASoC驱动重要结构体关系图
  9. Java—FileOperator
  10. cocoa下的多线程实践