[Django架构流程分析]请求处理机制其一:进入Django前的准备

转载 2015年11月20日 23:05:41

        注:以下内容转载自 现代魔法学院 网站的 请求处理机制其一:进入Django前的准备 一文,仅供学习使用。

        一个 Request 到达了!

        首先发生的是一些和 Django 有关(前期准备)的其他事情,分别是:

  • 如果是 Apache/mod_python 提供服务,request 由 mod_python 创建的 django.core.handlers.modpython.ModPythonHandler 实例传递给 Django。
  • 如果是其他服务器,则必须兼容 WSGI,这样,服务器将创建一个 django.core.handlers.wsgi.WsgiHandler 实例。

        这两个类都继承自 django.core.handlers.base.BaseHandler,它包含对任何类型的 request 来说都需要的公共代码。

        快准备处理器(Handler)

        当上面其中一个处理器实例化后,紧接着发生了一系列的事情:

  1. 这个处理器(handler)导入你的 Django 配置文件。
  2. 这个处理器导入 Django 的自定义异常类。
  3. 这个处理器调用它自己的 load_middleware 方法,加载所有列在 MIDDLEWARE_CLASSES 中的 middleware 类并且内省它们。

        最后一条有点复杂,我们仔细瞧瞧。

        一个 middleware 类可以渗入处理过程的四个阶段:request,view,response 和 exception。要做到这一点,只需要定义指定的、恰当的方 法:process_request,process_view, process_response 和 process_exception。middleware 可以定义其中任何一个或所有这些方法,这取决于你想要它提供什么样的功能。

        当处理器内省 middleware 时,它查找上述名字的方法,并建立四个列表作为处理器的实例变量:

  • _request_middleware 是一个保存 process_request 方法的列表(在每一种情况下,它们是真正的方法,可以直接调用),这些方法来自于任一个定义了它们的 middleware 类。
  • _view_middleware 是一个保存 process_view 方法的列表,这些方法来自于任一个定义了它们的 middleware 类。
  • _response_middleware 是一个保存 process_response 方法的列表,这些方法来自于任一个定义了它们的 middleware 类。
  • _exception_middleware 是一个保存 process_exception 方法的列表,这些方法来自于任一个定义了它们的 middleware 类。

        HttpRequest 准备好了就可以进入 Django

        现在处理器已经准备好真正开始处理了,因此它给调度程序发送一个信号 request_started(Django 内部的调度程序允许各种不同的组件声明它们正在干什么,并可以写一些代码监听特定的事件。关于这一点目前还没有官方的文档, 但在 wiki 上有一些注释。)。接下来它实例化一个 django.http.HttpRequest 的子类。

        根据不同的处理器,可能是 django.core.handlers.modpython.ModPythonRequest 的一个实例,也可能是 django.core.handlers.wsgi.WSGIRequest 的一个实例。需要两个不同的类是因为 mod_python 和 WSGI APIs 以不同的格式传入 request 信息,这个信息需要解析为 Django 能够处理的一个单独的标准格式。

        一旦一个 HttpRequest 或者类似的东西存在了,处理器就调用它自己的 get_response 方法,传入这个 HttpRequest 作为唯一的参数。这里就是几乎所有真正的活动发生的地方。

Django处理请求的工作机制

Django处理请求的工作机制
  • YangHeng816
  • YangHeng816
  • 2016年08月30日 17:01
  • 947

[Django架构流程分析]Django HTTP请求的处理流程

注:以下内容转载自 现代魔法学院 网站的 Django HTTP请求的处理流程 一文,仅供学习使用。         Django 和其他 Web 框架的 HTTP 处理的流程大致相同,Djang...
  • dapeng0802
  • dapeng0802
  • 2015年11月15日 21:53
  • 518

[Django架构流程分析]Django框架架构总览

注:以下内容转载自 现代魔法学院 网站的 Django框架架构总览 一文,仅供学习使用。         Django 架构总览         如下图所示 django 的架构总览图,整体上...
  • dapeng0802
  • dapeng0802
  • 2015年11月11日 22:52
  • 1387

分析Python的Django框架的运行方式及处理流程

之前在网上看过一些介绍Django处理请求的流程和Django源码结构的文章,觉得了解一下这些内容对开发Django项目还是很有帮助的。所以,我按照自己的逻辑总结了一下Django项目的运行方式和对R...
  • angel20082008
  • angel20082008
  • 2016年07月14日 15:47
  • 2464

Django 工作流程

https://segmentfault.com/a/1190000002447511在开始具体的代码之旅前,先来宏观地看下Django是如何处理Http Resquest的,如下图:假设你已经在浏览...
  • xsj_blog
  • xsj_blog
  • 2016年12月19日 11:40
  • 1344

Django处理http请求流程剖析

在详细介绍Django处理http请求的各个关键的流程点之前,笔者先简要的提及一下整个流程让各位同学有一个总体的认识。 在接受一个Http请求之前的准备 启动一个支持WSGI网关协议的服务器监听端口...
  • laughing2333
  • laughing2333
  • 2016年12月31日 20:56
  • 1982

Django运行方式及处理流程总结

之前在网上看过一些介绍Django处理请求的流程和Django源码结构的文章,觉得了解一下这些内容对开发Django项目还是很有帮助的。所以,我按照自己的逻辑总结了一下Django项目的运行方式和对R...
  • yongche_shi
  • yongche_shi
  • 2015年10月30日 16:23
  • 802

Django底层剖析之一次请求到响应的整个流程

As we all know,所有的Web应用,其本质上其实就是一个socket服务端,而用户的浏览器就是一个socket客户端。 1 2 3 4 5 6 7 8 9 10 11 12 ...
  • IAlexanderI
  • IAlexanderI
  • 2017年04月11日 09:49
  • 891

浅谈django的信号机制 Signals

一、概述 Django includes a “signal dispatcher” which helps allow decoupled applications get notified ...
  • midion9
  • midion9
  • 2016年05月11日 11:08
  • 461

django 信号机制-源码解析

django中得signals和操作系统(linux)中的signal完全是两会事,后者的signal是软件中断,提供一种处理异步事件得方法,信号是系统定义好的,可用作进程间传递消息得一种方法,而dj...
  • clh604
  • clh604
  • 2013年07月18日 16:19
  • 3015
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Django架构流程分析]请求处理机制其一:进入Django前的准备
举报原因:
原因补充:

(最多只允许输入30个字)