Django 中间件

2024 年 8 月 29 日 | 阅读 2 分钟

在 Django 中,中间件是在请求和响应执行期间处理的轻量级插件。中间件用于在应用程序中执行功能。这些功能可以是安全性、会话、csrf 保护、身份验证等。

Django 提供了各种内置中间件,也允许我们编写自己的中间件。查看 Django 项目的 settings.py 文件,其中包含各种中间件,这些中间件用于为应用程序提供功能。例如,安全中间件用于维护应用程序的安全性。

// settings.py

创建自己的中间件

中间件是一个类,它接受一个参数 get_response 并返回一个响应。

__init__(get_response)

它必须接受 get_response 参数,因为 Django 只使用它来初始化中间件。它只调用一次,而 __call__ 针对每个请求执行。

激活中间件

要激活中间件,请将其添加到 settings.py 文件的 MIDDLEWARE 列表中。

Django 项目不需要中间件,MIDDLEWARE 列表可以为空,但建议至少有一个 CommonMiddleware。

中间件顺序和分层

中间件按其在 MIDDLEWARE 列表中定义的顺序应用,每个中间件类都是一个层。MIDDLEWARE 列表就像一个洋葱,因此每个请求从上到下传递,响应以相反的顺序(从下到上)传递。

其他中间件方法

除了请求和响应之外,我们还可以添加另外三种方法来为我们的中间件添加更多功能。

process_view(request, view_func, view_args, view_kwargs )

它接受 HttpRequest 对象、函数对象、传递给视图的参数列表或参数的字典。

此方法在调用视图之前执行。它返回 None 或 HttpResponse,如果它返回一个 HttpResponse,它将停止处理并返回结果。

process_template_response(request,response)

它接受两个参数,第一个是 HttpRequest 的引用,第二个是 HttpResponse 对象。此方法在视图执行完成后调用。

它返回一个实现 render 方法的响应对象。

process_exception(request, exception)

此方法接受两个参数,第一个是 HttpRequest 对象,第二个是视图函数引发的 Exception 类对象。

此方法返回 None 或 HttpResponse 对象。如果它返回一个响应,则将应用中间件,并将结果返回到浏览器。否则,异常由默认处理系统处理。