Django源码解析(四) 中间件
2011-09-05 23:18
288 查看
Django源码解析(一) 开篇
Django源码解析(二) manage.py
Django源码解析(三) Django开发服务器,WSGI规范实现
Django源码解析(四) 中间件
Django源码解析(五) URL配置
Django中间件类型
Django的中间类型分为五种: 请求(Request)中间件,视图(View)中间件,模板(Template)中间件,响应(Response)中间件,异常(Exception)中间件.
特定的类型的中间件必须具有指定的方法.请求中间件必须具有process_request方法;视图中间件必须具有process_view方法;模板中间件必须具有process_template_response方法;Response必须具有process_response方法;异常中间件必须具有process_exception方法.可以存在一个类同时具有多个以上方法,即一个类可以同时是多种中间件.
中间件类必须使用无参__init__函数,创建类实例时,不需要任何参数.
中间件处理过程 1. 应用请求中间件,处理传入请求.如果请求中间件方法process_request返回的response非空,则终止处理过程,执行步骤7.
2. url匹配,查找视图函数.(下一章分析)
3. 应用视图中间件,处理传入请求 视图与视图参数.如果视图中间件方法process_view返回的response非空,则终止处理过程,执行步骤7.
4. 调用视图函数.
5. 如果视图函数抛出异常 ,应用异常中间件,处理传入请求与异常.如果异常中间件方法process_exception回的response非空,则终止处理过程.无论是否终止过程,都会跳到步骤7.
6. 如果response支持延迟渲染,应用模板中间件.(If the response supports deferred rendering, apply template response middleware and the render the response).执行步骤7.
7. 应用响应中间件,处理传入请求与中间件返回的response.
不同类型中间件的处理顺序 中间件的处理顺序指在settings.py中,MIDDLEWARE_CLASSES包含中间件的执行顺序.
添加中间件列表的执行代码:
怎么前两个中间件列表使用append方法添加,后面3个中间件列表使用insert方法添加呢? … 这样的目的是,控制传入动作的中间件执行顺序是从上到下,控制返回动作的中间件执行顺序是从下到上.即请求中间与视图中间件的执行顺序是从上到下,模板中间件 异常中间件与响应中间件的执行顺序是从下到上.
Django源码解析(二) manage.py
Django源码解析(三) Django开发服务器,WSGI规范实现
Django源码解析(四) 中间件
Django源码解析(五) URL配置
Django中间件类型
Django的中间类型分为五种: 请求(Request)中间件,视图(View)中间件,模板(Template)中间件,响应(Response)中间件,异常(Exception)中间件.
特定的类型的中间件必须具有指定的方法.请求中间件必须具有process_request方法;视图中间件必须具有process_view方法;模板中间件必须具有process_template_response方法;Response必须具有process_response方法;异常中间件必须具有process_exception方法.可以存在一个类同时具有多个以上方法,即一个类可以同时是多种中间件.
中间件类必须使用无参__init__函数,创建类实例时,不需要任何参数.
中间件处理过程 1. 应用请求中间件,处理传入请求.如果请求中间件方法process_request返回的response非空,则终止处理过程,执行步骤7.
2. url匹配,查找视图函数.(下一章分析)
3. 应用视图中间件,处理传入请求 视图与视图参数.如果视图中间件方法process_view返回的response非空,则终止处理过程,执行步骤7.
4. 调用视图函数.
5. 如果视图函数抛出异常 ,应用异常中间件,处理传入请求与异常.如果异常中间件方法process_exception回的response非空,则终止处理过程.无论是否终止过程,都会跳到步骤7.
6. 如果response支持延迟渲染,应用模板中间件.(If the response supports deferred rendering, apply template response middleware and the render the response).执行步骤7.
7. 应用响应中间件,处理传入请求与中间件返回的response.
不同类型中间件的处理顺序 中间件的处理顺序指在settings.py中,MIDDLEWARE_CLASSES包含中间件的执行顺序.
添加中间件列表的执行代码:
if hasattr(mw_instance, 'process_request'): request_middleware.append(mw_instance.process_request) if hasattr(mw_instance, 'process_view'): self._view_middleware.append(mw_instance.process_view) if hasattr(mw_instance, 'process_template_response'): self._template_response_middleware.insert(0, mw_instance.process_template_response) if hasattr(mw_instance, 'process_response'): self._response_middleware.insert(0, mw_instance.process_response) if hasattr(mw_instance, 'process_exception'): self._exception_middleware.insert(0, mw_instance.process_exception)
怎么前两个中间件列表使用append方法添加,后面3个中间件列表使用insert方法添加呢? … 这样的目的是,控制传入动作的中间件执行顺序是从上到下,控制返回动作的中间件执行顺序是从下到上.即请求中间与视图中间件的执行顺序是从上到下,模板中间件 异常中间件与响应中间件的执行顺序是从下到上.
相关文章推荐
- 消息中间件 RocketMQ源码解析:Message拉取&消费(上)
- 消息中间件 RocketMQ源码解析:Message顺序发送与消费
- Django源码解析(三) Django开发服务器,WSGI规范实现.
- 数据库中间件Mycat源码解析(二):Mycat的网络通讯层
- Django 源码小剖: 初探中间件(middleware)
- Django源码分析4:staticfiles静态文件处理中间件分析
- 消息中间件 RocketMQ源码解析:定时消息与消息重试
- django---SessionMiddleware源码解析(一)
- 消息中间件 RocketMQ源码解析:Message发送&接收
- 数据库中间件 Sharding-JDBC 源码分析 —— SQL 解析(三)之查询SQL
- 数据库中间件Mycat源码解析(三):Mycat的SQL解析和路由
- TongWEB与JOnAS 对比,国产中间件战斗机东方通TongWEB源码解析
- 消息中间件 RocketMQ源码解析:事务消息
- 消息中间件 RocketMQ源码解析:高可用
- 数据库中间件 MyCAT 源码解析 —— 分片结果合并(一)
- Django源码解析
- django---SessionMiddleware源码解析(二)
- Django源码解析:setting.py
- [Django架构流程分析]请求处理机制其二:Django中间件的解析
- 消息中间件 RocketMQ源码解析:Message存储