在 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 对象。如果返回响应,则将应用中间件并将结果返回到浏览器。否则,异常由默认处理系统处理。

标签: django语言, django教程, django技术, django学习, django学习教程, django下载, django开发, django入门教程, django进阶教程, django高级教程, django面试题, django笔试题, django编程思想