个性化阅读
专注于IT技术分析

Django中间件

本文概述

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

赞(0)
未经允许不得转载:srcmini » Django中间件

评论 抢沙发

评论前必须登录!