📅  最后修改于: 2020-12-31 00:44:50             🧑  作者: Mango
在Django中,中间件是一个轻量级插件,可在请求和响应执行期间进行处理。中间件用于在应用程序中执行函数。这些功能可以是安全性,会话,csrf保护,身份验证等。
Django提供了各种内置的中间件,还允许我们编写自己的中间件。请参阅Django项目的settings.py文件,其中包含各种中间件,该中间件用于为应用程序提供功能。例如,安全中间件用于维护应用程序的安全性。
// settings.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)
return response
__init __(get_response)
它必须接受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(request,view_func,view_args,view_kwargs)
它需要HttpRequest对象,函数对象,传递给视图的参数列表或参数字典。
此方法在调用视图之前执行。它返回None或HttpResponse,如果返回HttpResponse,它将停止处理并返回结果。
process_template_response(请求,响应)
它需要两个参数,第一个是HttpRequest的引用,第二个是HttpResponse对象。视图执行完成后立即调用此方法。
它返回一个实现render方法的响应对象。
process_exception(请求,异常)
此方法有两个参数,第一个是HttpRequest对象,第二个是view函数引发的Exception类对象。
此方法返回None或HttpResponse对象。如果返回响应,则将应用中间件并将结果返回到浏览器。否则,异常是默认处理系统处理的。