从这里拉开django框架的帷幕。。撕开,哈哈

主要涉及的类:django.core.handlers.base.BaseHandler,django.core.handlers.wsgi.WSGIHandler,前者为后者的父类。

django.http.request.HttpRequest

后者的实例实现了WSGI请求的处理,因为WSGIHandler 实现了__call__方法,所以实例成为了可调用对象。

流程:接收到一个wsgi请求--》生成一个WSGIHandler实例,传入参数environ,start_response.--》建立request对象(environ作为参数)--》调用base.BaseHandler的get_response方法(使用这个request作为参数)

这个get_response的主要作用就是各种middleware的调用,其次就是解析url到view,依据url.py中的patterns。

urlresolve是什么呢,就是从urlconf中找出第一个匹配到的view。

然后就开始middleware和view的调用了。

get_response首先将request用_requet_middleware处理一遍。

如果request_middleware返回response了,就直接结束并返回response

request_middleware循环完了当然该view_middleware了。view_middleware在view还没有被执行的时候进行处理。参数是request,view,var参数keyword参数。

接着就该真正的执行这个view了,如果在views中出错了,就进行exceptiion_middleware处理。否则返回一个response。

如果view的返回值是一个Template,那么会导致template_response_middleware的调用。参数是request和response

最后被调用的是response_middleware,参数仍然是request,response,不过这个response是Response对象了。。

注意在上面任何一步返回一个response都会导致views中的response失效。

没什么难的,源代码很清晰。。

接下来分析一下这个过程中涉及到的urlresolve过程。

转载于:https://www.cnblogs.com/Yeah-come-on/p/3652528.html

django 的请求处理部分----WSGIHandler 源码分析 django1.5.5相关推荐

  1. Struts2请求处理流程及源码分析

    Struts2请求处理流程及源码分析 根据Web.xml配置,请求首先经过ActionContextCleanUp过滤器,其为可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助(Site ...

  2. Django系列之启动入口源码分析

    manage.py是启动入口,在里面调用execute_from_command_line(sys.argv)方法 def execute_from_command_line(argv=None):& ...

  3. Django源码分析5:session会话中间件分析

    django源码分析 本文环境python3.5.2,django1.10.x系列 1.这次分析django框架中的会话中间件. 2.会话保持是目前框架都支持的一个功能,因为http是无状态协议,无法 ...

  4. Django源码分析4:staticfiles静态文件处理中间件分析

    django源码分析 本文环境python3.5.2,django1.10.x系列1.在上一篇文章中已经分析过handler的处理过程,其中load_middleware就是将配置的中间件进行初始化, ...

  5. Django源码分析3:处理请求wsgi分析与视图View

    django源码分析 本文环境python3.5.2,django1.10.x系列 根据前上一篇runserver的博文,已经分析了本地调试服务器的大致流程,现在我们来分析一下当runserver运行 ...

  6. Django源码分析10:makemigrations命令概述

    django源码分析 本文环境python3.5.2,django1.10.x系列 django源码分析-makemigrations命令概述 Django项目中的数据库管理命令就是通过makemig ...

  7. Django源码分析9:model.py表结构的初始化概述

    django源码分析 本文环境python3.5.2,django1.10.x系列 django源码分析-model概述 Django项目中提供了内置的orm框架,只需要在models.py文件中添加 ...

  8. Django源码分析8:单元测试test命令浅析

    django源码分析 本文环境python3.5.2,django1.10.x系列 django源码分析-test命令分析 Django项目中提供了,test命令行命令来执行django的单元测试,该 ...

  9. Django源码分析7:migrate命令的浅析

    django源码分析 本文环境python3.5.2,django1.10.x系列 django源码分析-migrate命令分析 Django项目中提供了,通过migrations操作数据库的结构的命 ...

最新文章

  1. MySQL学习(二)复制
  2. php中获取网站访客来源的关键词方法
  3. 回顾 | 进击吧! Blazor !第三期 信息交互
  4. 01 | 从神经元说起:数学篇
  5. 【踩坑记录】mybatis-plus的insert方法,默认会生成一个uuid作为主键,导致类型不一致,存入数据库报错
  6. Android实现ListView(2)
  7. linux 更换窗口管理器,linux Gnome .KDE.xfce4窗口管理器切换
  8. win 7 64 安装 tensorflow
  9. 苹果Mac全新的文件启动方式:Hapigo
  10. python交互式日历制作_python tkinter制作日历界面的简单步骤
  11. ionic3硬件检测、请求权限插件 Diagnostic 的用法
  12. shader拖尾_拖尾效果 - LouisSong - 博客园
  13. 注册昵称时限制 中文7个字 字母21个
  14. B端页面——详细表格设计流程
  15. java使用递归,复制文件夹下的所有子文件
  16. Tomcat单机多实例配置
  17. 【19】数据库范式、E-R图
  18. 全球最火的程序员学习路线!
  19. JavaScript数据类型基本数据类型与引用数据类型的区别
  20. bilibili小电视桌面天气站(esp8266+微信小程序控制)超详细,看这一篇就够了

热门文章

  1. 三、Java Web中出现的一些乱码问题总结(详解)
  2. 十、关于MySQL 标识列,你该了解这些!
  3. LeetCode 1812. 判断国际象棋棋盘中一个格子的颜色
  4. LeetCode 321. 拼接最大数(单调栈)*
  5. LeetCode 309. 最佳买卖股票时机含冷冻期(动态规划)
  6. 程序员面试金典 - 面试题 04.12. 求和路径(二叉树递归)
  7. LeetCode 1247. 交换字符使得字符串相同
  8. 写了 10 年代码之后,我学到的 7 个绝对真理
  9. mysql设置catalog_Catalog与Schema
  10. 数据标准化 - scale() - Python代码