【Django】中间件

Middleware 这个地方把所有Request 拦截住,用我们自己的方式完成处理以后直接返回 Response。因此了解中间件的构成是非常必要的。

Initializer: __init__(self)

出于性能的考虑,每个已启用的中间件在每个服务器进程中只初始化一次。也就是说 __init__() 仅在服务进程启动的时候调用,而在针对单个 request 处理时并不执行。

对一个 middleware 而言,定义 __init__() 方法的通常原因是检查自身的必要性。如果 __init__() 抛出异常 django.core.exceptions.MiddlewareNotUsed ,则 Django 将从 middleware 栈中移出该 middleware。

在中间件中定义 __init__() 方法时,除了标准的 self 参数之外,不应定义任何其它参数。

Request预处理函数: process_request(self, request)

这个方法的调用时机在 Django 接收到 request 之后,但仍未解析URL以确定应当运行的 view 之前。Django 向它传入相应的 HttpRequest 对象,以便在方法中修改。

process_request() 应当返回 None 或 HttpResponse 对象。

如果返回 None ,Django 将继续处理这个 request,执行后续的中间件, 然后调用相应的 view。

如果返回 HttpResponse 对象,Django 将不再执行任何其它的中间件(无视其种类)以及相应的view。 Django将立即返回该 HttpResponse。

View预处理函数: process_view(self, request, callback, callback_args, callback_kwargs)

这个方法的调用时机在 Django 执行完 request 预处理函数并确定待执行的 view 之后,但在 view 函数实际执行之前。

  • request:HttpRequest 对象。
  • callback:Django将调用的处理request的python函数. 这是实际的函数对象本身, 而不是字符串表述的函数名。
  • args:将传入view的位置参数列表,但不包括 request 参数(它通常是传入view的第一个参数)。
  • kwargs:将传入view的关键字参数字典。

如同 process_request() , process_view() 应当返回 None 或 HttpResponse 对象。如果返回 None , Django将继续处理这个 request ,执行后续的中间件, 然后调用相应的view。

如果返回 HttpResponse 对象,Django 将不再执行 任何 其它的中间件(不论种类)以及相应的view,Django将立即返回。

Response后处理函数: process_response(self, request, response)

这个方法的调用时机在 Django 执行 view 函数并生成 response 之后。

该处理器能修改 response 的内容;一个常见的用途是内容压缩,如 gzip 所请求的 HTML 页面。

这个方法的参数相当直观: request 是 request 对象,而 response 则是从 view 中返回的 response 对象。

process_response() 必须返回 HttpResponse 对象. 这个 response 对象可以是传入函数的那一个原始对象(通常已被修改),也可以是全新生成的。

Exception后处理函数: process_exception(self, request, exception)

这个方法只有在 request 处理过程中出了问题并且 view 函数抛出了一个未捕获的异常时才会被调用。这个钩子可以用来发送错误通知,将现场相关信息输出到日志文件,或者甚至尝试从错误中自动恢复。

这个函数的参数除了一贯的 request 对象之外,还包括view函数抛出的实际的异常对象 exception 。

process_exception() 应当返回 None 或 HttpResponse 对象。

如果返回 None , Django将用框架内置的异常处理机制继续处理相应request。

如果返回 HttpResponse 对象,Django 将使用该response对象,而短路框架内置的异常处理机制。

时间: 2024-10-10 23:44:30

【Django】中间件的相关文章

关于Django中间件自己的一点理解

Django中间件我觉得是一个非常重要的东西,所以把自己的一些理解分享出来,哪里有不对的还希望大家可以帮助我修改. 因为是自己写的代码,所以就把代码粘过来了,里边每一部分都会有自己的理解和注释,见谅! from django.utils.deprecation import MiddlewareMixinfrom django.shortcuts import redirect,HttpResponse #对于有些Django没有MiddleMixin类,就在上边自己写一个,但是这时上边的类引用

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', '

Django学习之七:Django 中间件

目录 Django 中间件 自定义中间件 - - - 大体两种方式 将中间件移除 实例 总结 Django 中间件 Django中间件可看作是包裹在django处理机制的外层,Httprequest和Httpresponse都要经中间件处理,从而起到全局钩子的作用,可以达到一些目的:如过滤请求,预处理请求,响应修改等. 我理解,很多基于会话的应用系统,都可以设计中间件环节.如数据库系统.中间件可以起到全局钩子的作用.django的中间件的设计就是一种递归顺序调用,利用httprequest作为递

利用django中间件CsrfViewMiddleware防止csrf攻击

一.在django后台处理 1.将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项目中会自带的. MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middle

Django中间件的使用

Django中间件的使用 中间件(middleware) 中间件应用于request与服务端之间和服务端与response之间,客户端发起请求到服务端接收可以通过中间件,服务端返回响应与客户端接收响应可以通过中间件,也就是说中间件可以处理request和response. Django默认的中间件 在settings中Django以及默认添加了许多有用的中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'dja

☆Django☆---中间件 csrf跨站请求伪造 auth模块 settings功能插拔式源码

Django中间件 django生命周期图 中间件: 概念: Django中间件就类似于 django的保安   请求 的时候需要先经过中间件才能到达django后端(urls, views)   响应 走的时候也需要经过中间件才能到达web服务网关接口 django默认的七个中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.Session

Django中间件、csrf跨站请求伪造以及基于Django中间件思想实现功能的插拔式配置

一.django中间件 1.1解释:django中间件是类似于是django的保安,请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models),响应走的时候也需要经过中间件才能到达web服务网关接口 1.2django默认的七个中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.Session

五十二、django 中间件,csrf跨站请求伪造,auth模块表

django 中间件 django中间件事类似django的保安,请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models), 响应走的时候也需要经过中间件才能到达web服务网关接口 django中间件中有五个用户可以自定义的方法 django中间件可以用来做什么? 1.网站全局的身份校验,访问频率限制,权限校验..只要涉及到全局的校验都可以在中间件中完成 2.django的中间件是所有web框架中,做的最好 需要掌握的方法有: 1.proces