细说Django中间件 (middleware)

  • 中间件是处理django的请求和响应的框架级别的钩子,本质是一个类(直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作)
  • 由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。
  • 定义的中间件需要注册
  • django中请求响应流程

1.中间件定义的五个方法:

  • process_request(self,request)
  • process_response(self, request, response)
  • process_view(self, request, view_func, view_args, view_kwargs)
  • process_exception(self, request, exception)
  • process_template_response(self,request,response)

1.1 process_request

  • process_request(self,request)

特征

在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

  1. 执行时间: 在执行视图函数之前执行
  2. 参数: request
    • request和视图函数中的的request是一个对象
  3. 执行顺序:
    • 按照注册的顺序进行执行
  4. 返回值:
    • 返回值为none的时候,执行顺序正常
    • 返回值如果是HttpResponse, 后面的中间件的process_request、视图函数都不执行,直接执行当前中间件中的process_response方法,再倒序执行之前的中间件中process_response方法。

1.2 process_response

  • process_response(self, request, response)

特征

在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

  1. 执行时间: 在执行视图函数之后执行
  2. 参数: request / response
    • request 和视图函数中的的request是一个对象
    • response 返回给浏览器响应对象(不一定是视图对象,peocess_request也会返回对象)
  3. 执行顺序:
    • 按照注册的顺序,倒序执行
  4. 返回值:
    • ? HttpResponse:必须返回response对象
  • process_request执行流程

1.3 process_view

  • process_view(self, request, view_func, view_args, view_kwargs)

特征

在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

  1. 执行时间: 视图函数之前,process_request之后
  2. 参数: request
    • request 和视图函数中的的request是一个对象
    • view_func 视图函数
    • view_args 视图函数的位置参数
    • view_kwargs 视图函数的关键字参数
  3. 执行顺序:
    • 按照注册的顺序进行执行
  4. 返回值:
    • 返回值为none的时候, 执行顺序正常
    • 返回值如果是HttpResponse, 后面的中间的process_view、视图函数都不执行,直接执行注册的最后一个中间件中的process_response方法,再倒叙执行之前的中间中process_response方法。
  • 执行流程图

1.4process_exception

  • process_exception(self, request, exception)

特征

在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

  1. 执行时间((触发条件)): 视图函数之后,视图层面有错时才执行
  2. 参数: request/exception
    • request 和视图函数中的的request是一个对象
    • exception 视图中的错误对象
  3. 执行顺序:
    • 按照注册的顺序 倒叙执行
  4. 返回值:
    • 返回值为none的时候, 交给下一个中间件取处理异常,都没有处理交由django处理异常
    • 返回值如果是HttpResponse, 后面的中间件的process_exception不执行,直接执行最后一个中间件中的process_response方法,倒叙执行之前的中间中process_response方法。
  • 流程图

1.5process_template_response

  • process_template_response(self,request,response)

特征

在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

  1. 执行时间((触发条件)): 视图函数之后,视图返回的是一个templateResponse对象(跟render用法类似)
  2. 参数: ,request,response
    • request 和视图函数中的的request是一个对象
    • response templateResponse对象
  3. 执行顺序:
    • 按照注册的顺序 倒叙执行
  4. 返回值:
    • HttpResponse:必须返回response对象
  • 流程图

2.完整的django请求的生命周期

原文地址:https://www.cnblogs.com/bigox/p/11107416.html

时间: 2024-10-29 05:52:19

细说Django中间件 (middleware)的相关文章

利用Django中间件middleware解决用户未登录问题(转)

add by zhj: Django的中间件一般用于处理通用性的问题,分为五种,按处理顺序为request_middleware,view_middleware,exception_middleware,template_response_middleware,response_middleware,Django貌似为每种中间件都定义接口,比如request_middleware中间件的接口为process_request(self, request),我们增加新的中间件时,只要实现这些接口就可

Django中间件MiddleWare

一.什么是中间件 中间件是一个用来处理Django的请求和响应的框架级别的钩子. 中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几个方法,Django框架会在请求的特定的时间去执行这些方法. 我们一直都在使用中间件,只是没有注意到而已,打开Django项目的Settings.py文件,看到下图的MIDDLEWARE配置项. MIDDLEWARE配置项是一个列表,列表中是一个个字符串,这些字符串其实是一个个类,也就是一个个中间件. MIDD

django 自定义中间件 middleware

Django 中间件 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性,其它的MVC框架也有这个功能,名称为IoC. Django在中间件中预置了五个方法,这五个方法的区别在于不同的阶段执行,对输入或输出进行干预,方法如下: 1)初始化:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件. def __init__(

Django 详解 中间件Middleware

Django中间件 还是涉及到django的请求生命周期.middle ware 请求穿过中间件到达url,再经过中间件返回给用户. 简单实例 django项目根目录新建一个Middle文件夹,再新建一个test.py文件 在test文件中写入:其中的类必须继承 from django.utils.deprecation import MiddlewareMixin from django.utils.deprecation import MiddlewareMixin class M1(Mid

Django框架之中间件MiddleWare

Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性.我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预. 中间件的原理其实就是定义了一个装饰器,但是这个装饰器可以对整个项目中的所有方法进行装饰: 我们可以通过中间件,对请求对象和响应对象进行相应的干预操作. 实现中间件的流程: 1.在子应用中编写一个middleware.p

Django中间件部分

一.什么是WSGI? WEB框架的本质是一个socket服务端接收用户请求,加工数据返回给客户端(Django),但是Django没有自带socket需要使用 别人的 socket配合Django才能正常运行,socket有很多如下,  但是它们必须遵循一个规范 WSGI(web服务网关接口)这个所有socket都遵守的规范就是WSGI. Django默认使用: wsgiref socket(并发性能低 测试使用) 在公司生产系统上一般用uwsgi+nginx+Django结合使用 wsgire

Django中间件 及 form 实现用户登陆

Django中间件 及 form 实现用户登陆 Form 验证 密码调用md5 加密存储 form.add_error("字段名", "错误信息") 自定义错误信息 装饰器实现 用户认证 中间件实现 用户认证 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影响到性能. django默认的中间件在settings.py中 当用户发起请求

Django 中间件简介

Django 中间件简介 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件 中间件中一共有四个方法: process_request(self,request) 发送请求 process_view(self, request, callback,

【python】-- Django 中间件、缓存、信号

Django  中间件.缓存.信号 一. Django  中间件 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件: MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', '