Django 中间件

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(request, response)

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

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

process_exception(request, exception)

该方法接受两个参数,第一个是HttpRequest对象,第二个是视图函数抛出的异常类对象。

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程