Diango教程-Django 中间件
在 Django 中,中间件是一个轻量级插件,在请求和响应执行期间进行处理。中间件用于执行应用程序中的功能。这些功能可以是安全、会话、csrf 保护、身份验证等。
Django提供了各种内置的中间件,也允许我们编写自己的中间件。请参阅Django 项目的settings.py文件,其中包含各种中间件,用于向应用程序提供功能。例如,安全中间件用于维护应用程序的安全性。
// 设置.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
创建自己的中间件
中间件是一个接受参数get_response并返回响应的类。
class FirstMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
__init__(获取响应)
它必须接受 get_response 参数,因为 Django 仅使用它来初始化中间件。它只调用一次,而 call 对每个请求执行。
激活中间件
要激活中间件,请将其添加到settings.py文件的 MIDDLEWARE 列表中。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XframeOptionsMiddleware',
'add new created middleware here'
]
Django 项目不需要中间件,MIDDLEWARE 列表可以为空,但建议至少有一个 CommonMiddleware。
中间件顺序和分层
中间件按照 MIDDLEWARE 列表中定义的顺序应用,每个中间件类都是一个层。MIDDLEWARE 列表就像一个洋葱,因此每个请求从上到下传递,而响应则按相反顺序(从下到上)。
其他中间件方法
除了请求和响应之外,我们还可以添加三种方法来为我们的中间件添加更多功能。
process_view(请求、view_func、view_args、view_kwargs)
它分别接受 HttpRequest 对象、函数对象、传递给视图的参数列表或参数字典。
该方法在调用视图之前执行。它返回 None 或 HttpResponse,如果返回 HttpResponse,则停止处理并返回结果。
process_template_response(请求,响应)
它有两个参数,第一个是 HttpRequest 的引用,第二个是 HttpResponse 对象。该方法在视图完成执行后立即调用。
它返回一个实现 render 方法的响应对象。
process_exception(请求,异常)
该方法有两个参数,第一个是 HttpRequest 对象,第二个是视图函数引发的 Exception 类对象。
此方法返回 None 或 HttpResponse 对象。如果返回响应,则将应用中间件并将结果返回到浏览器。否则,异常由默认处理系统处理。