中间件必须将每个请求和响应拉到 Web 应用程序,并处理中间件对请求和响应的处理。简单来说,这些中间件组件只不过是一个 python 类;这些中间件元素被称为组件;这些组件中的每一个都负责执行某些操作。这些组件在 settings.py 文件中的 python 列表变量 MIDDLEWARE 中表示为字符串。中间件组件可以在应用程序的任何路径中声明,唯一需要确保的是该路径是否在 settings.py 文件的中间件元组中声明。在本主题中,我们将学习 Django 中间件。
中间件激活
可以通过在 settings.py 文件的 MIDDLEWARE 列表中提及中间件项来激活中间件。下面提到的列表包含在 Django 项目启动时生成的中间件项目的默认列表。声明中间件组件的顺序非常重要。
上面列出的 Django 框架中的默认中间件的必要性和使用方法解释如下
默认中间件 | Operations | 描述 |
---|---|---|
djangosecure.middleware.SecurityMiddleware | X-Frame-Options: DENY | 将显示的页面限制在一个框架内 |
HTTP Strict Transport Security | 设置此项允许浏览器只能通过 HTTPS 而不是 HTTP 访问网站。 | |
X-Content-Type-Options: nosniff | 此选项有助于防止 MIME 嗅探漏洞 | |
X-XSS-Protection: 1; mode=block | 这会将所有 http 连接重定向到 https 连接。 | |
SSL Redirect | 这会将所有 http 连接重定向到 https 连接。 | |
Detecting proxied SSL | 在极少数情况下,request.is_secure() 方法对有效请求返回 false;设置此选项将有助于为安全外部连接设置替代标头。 | |
django.middleware.common.CommonMiddleware | Rewriting of URL’s based on APPEND_SLASH and PREPEND_WWW settings. When APPEND_SLASH is TRUE, and the URL does not have a ‘/,’ then the new url will have a slash at the end of the URL. | 不适用 |
Restrict access for the users listed in DISALLOWED_USER_AGENTS setting | ||
django.contrib.sessions.middleware.SessionMiddleware | 当会话中间件被激活时,每个 HttpRequest 对象都会有一个会话属性标记为第一个参数。这是一种字典类型的对象,会话值可以使用 request 插入到这个字典对象中。视图文件中任意位置的会话 | |
django.middleware.csrf.CsrfViewMiddleware | 此中间件选项可防止所有跨站点请求伪造 | |
django.contrib.auth.middleware.AuthenticationMiddleware | 设置此中间件选项会将当前登录的用户添加到正在输入的每个 httpRequest 对象 | |
django.contrib.messages.middleware.MessageMiddleware | 该中间件将处理网站和网络浏览器之间的所有临时消息。 | |
django.middleware.clickjacking.XFrameOptionsMiddleware | 将显示的页面限制在一个框架内。 |
中间件在 Django 中是如何工作的?
以下是Django中中间件工作的要点,
- 声明中间件组件的顺序非常重要。
- 中间件类在请求/响应生命周期中执行两次。
- 在请求期间,类从上到下顺序执行。
- 在响应期间,这些类按从下到上的顺序执行。这就是为什么组件的顺序非常重要的原因。
- init 方法在服务器启动期间执行。
- _call__ 方法为每个请求执行。
中间件中的强制方法
下面列出的方法中至少有一个必须声明为中间件的一部分,
- 如果中间件需要在请求期间处理:
- process_request(请求)
- process_view(请求,view_func,view_args,view_kwargs)
- 如果响应时中间件需要处理:
- process_exception(request, exception) (仅当视图引发异常时)
- process_template_response(request, response)(仅用于模板响应)
- process_response(请求,响应)
自定义中间件
要设置自定义中间件设置,应遵循以下步骤;此自定义中间件将是一个用户定义的中间件,位于中间并对传递的请求和响应消息进行所需或指导的一组处理。自定义中间件为中间件服务提供了极大的灵活性。所以这些自定义级别的中间件服务在 Django 中间件设置中扮演着非常重要的角色。此外,内置中间件服务的属性也可以在几个可能的范围内进行调整,以获得中间件功能。
1. 将名为 middleware.py 的文件放在项目内的任何位置。根据 Django 设置,放置此中间件文件的位置并不是什么大问题。重要的是确保该文件放置的路径在 settings.py 文件的中间件列表中准确提及的过程。这是最重要的元素。
2. 将中间件的类放在 middleware.py 文件中。这是这个过程中最重要的一步;由于中间件的执行顺序很重要,因此确保将新添加的中间件项放在中间件列表中的最后一个元素非常重要。另外,需要严格保证中间件项是字符串格式,
middleware.py:
从上面的条目可以看出,middleware.py 文件放在了 Django_app1 文件夹中,该文件里面有一个名为 NewMiddleware 的中间件类作为实例。如果必须在 middleware.py 文件中安装更多新的中间件,则必须为所有这些放置单独的条目。
3. 使用 python manage.py runserver 命令重新加载服务器并验证网页。
一旦服务器被加载并且从页面接收到任何请求,中间的消息提到“新安装的中间件成功触发!!!” 显示在屏幕上。这证明新安装的中间件按预期工作