Django中间件基础用法详解

蓝鲸
蓝鲸
发布时间:2026-10-11| 2人浏览过
原创

Django中间件是处理请求和响应的钩子,可在视图函数执行前或后运行。本文详解中间件的五种核心方法(process_request、process_view、process_exception、process_response)的执行时机与作用,并通过自定义UserLoginCheck中间件的示例,演示如何在视图函数执行前进行登录验证,最后展示在settings.py中配置中间件的具体步骤。

Django中间件概述

Django中间件是一个轻量级、底层的“插件”系统,用于全局修改Django的输入或输出。它可以在视图函数执行前运行,常用于实现登录验证、日志记录、跨域处理等功能。要使用中间件,通常需要在项目文件夹下创建一个专门的文件夹(如示例中的utils)来存放中间件代码,并在settings.py中进行配置。

中间件的五种核心方法

Django中间件类可以定义五种方法,每种方法在请求处理的不同阶段被调用:

  1. process_request(self, request):请求预处理函数。在Django接收request后、解析URL确定视图函数之前调用。Django向该方法传入Request对象。若返回None,则继续处理;若返回HttpResponse对象,则立即返回该对象,不再执行后续中间件及相应的view。
  2. process_view(self, request, callback, args, kwargs):视图预处理函数。在确定待执行view后、view函数实际执行之前调用。参数包含request对象、实际的Python函数对象(callback)、位置参数列表(args)和关键字参数字典(kwargs)。若返回None,则继续处理;若返回HttpResponse对象,则立即返回该对象。
  3. process_template_response(self, request, response):模板响应处理函数。默认不执行,仅当视图返回的对象具有render方法时才会执行。该方法返回视图对象中render方法的返回值。
  4. process_exception(self, request, exception):异常后处理函数。仅在view抛出未捕获异常时调用,可用于发送错误通知或输出日志。参数包含exception对象。若返回None,则继续处理;若返回HttpResponse对象,则短路异常处理机制。
  5. process_response(self, request, response):响应后处理函数。在Django执行view生成response后调用。该处理器能修改response的内容,常见用途包括内容压缩(如gzip)。该方法必须返回HttpResponse对象。

实战:自定义登录验证中间件

以下示例演示如何创建一个名为UserLoginCheck的中间件,用于在用户访问需要登录的页面时进行验证。

from django.http import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin

class UserLoginCheck(MiddlewareMixin):
  '''
  登录验证中间件
  '''
  def process_request(self, request):
    # 用户request请求前
    path = ['/login/', '/logout/'] # 不需要进行登录检测的url
    if request.path in path:
      return

    userinfoSession = request.session.get('userinfo')
    if not userinfoSession:
      return HttpResponseRedirect('/login/')
    return

在上述代码中,UserLoginCheck类继承自MiddlewareMixin。在process_request方法中,首先定义了不需要进行登录检测的URL路径(如/login/和/logout/)。如果当前请求路径在这些路径中,则直接返回None,继续处理。否则,从session中获取userinfo。如果userinfo不存在,则重定向到/login/页面;如果存在,则返回None,继续处理。

配置中间件

在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',
  'utils.loginCheck.UserLoginCheck', # 此处为自定义的中间件
]

注意,中间件的执行顺序很重要。Django按列表顺序依次调用process_request方法,按逆序调用process_response方法。因此,自定义中间件的放置位置会影响其执行时机。

总结

Django中间件为全局处理请求和响应提供了强大的机制。通过理解并合理使用process_request、process_view、process_exception和process_response这五种方法,可以实现登录验证、日志记录、跨域处理等多种功能。在实际开发中,应根据具体需求选择合适的中间件方法,并合理配置中间件的执行顺序。

以上就是Django中间件基础用法的详细内容,更多关于Django中间件的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。