Django中间件定义、生命周期与实战配置详解

程一诺
程一诺
发布时间:2026-10-13| 6人浏览过
原创

本文深入解析Django框架中的中间件机制,详细阐述其作为底层插件系统的定义与作用。重点介绍init、process_request、process_view、process_response及process_exception五个核心方法的执行阶段与返回值要求。通过完整代码示例,演示如何创建自定义中间件、在settings.py中注册以及处理视图异常,帮助开发者掌握无侵入式开发技巧,提升Django应用的健壮性与灵活性。

Django中间件概述

本文通过具体实例,详细讲解Django框架中中间件的定义及其使用方法,供读者参考学习。

中间件定义与作用

1. 定义

Django中间件是一种轻量级的底层插件系统,能够介入请求与响应的处理流程,从而修改Django的输入或输出。这种设计为开发者提供了无侵入式的开发模式,增强了框架的健壮性。类似的功能在其他MVC框架中通常被称为IoC(控制反转)。

中间件五大核心方法解析

2. 各个方法

Django在中间件中预置了五个关键方法,它们分别在请求处理的不同阶段执行,对输入或输出进行干预。具体方法如下:

1)初始化(__init__):无需任何参数。当服务器接收第一个请求时调用,且仅调用一次,主要用于确定是否启用当前中间件。

初始化方法__init__


def init(): 
pass

2)process_request:在URL匹配之前被调用,每个请求都会执行。该方法应返回None或HttpResponse对象。

请求处理process_request


def process_request(request): 
pass

3)process_view:在URL匹配之后、视图函数调用之前被调用,每个请求都会执行。该方法应返回None或HttpResponse对象。

视图处理process_view


def process_view(request, view_func, view_args, view_kwargs): 
pass

4)process_response:在视图函数执行之后、所有响应返回浏览器之前被调用,每个请求都会执行。该方法必须返回HttpResponse对象。

响应处理process_response


def process_response(request, response): 
pass

5)process_exception:当视图函数抛出异常时调用,每个请求都会执行。该方法应返回一个HttpResponse对象以处理异常。

异常处理process_exception


def process_exception(request,exception): 
pass

中间件实战配置与测试

3. 案例加以说明

1)在booktest/目录下创建middleware.py文件,具体代码如下:

自定义中间件代码实现


from django.http import HttpResponse
from django.conf import settings
class MyMiddleWare(object):
  def __init__(self):
    print("init")
  def process_request(self,request):
    print("prcess_request")
  def process_view(self,request,view_func,*view_args,**view_kwargs):
    print("process_view")
  def process_response(self,request,response):
    print("process_response")
    return response
  def process_exception(self,request,exception):
    print("exception")

2)在test05/settings.py文件中,向MIDDLEWARE_CLASSES项中注册该中间件。

中间件注册配置


MIDDLEWARE_CLASSES = (
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
  'django.middleware.security.SecurityMiddleware',
  'booktest.middleware.MyMiddleWare',
)

3)修改booktest/views.py中的视图index函数。

视图函数调用示例


# 首页的视图函数
def index(request):
  print("index")
  return render(request,'booktest/index.html')

4)启动服务器,命令行输出效果如下图所示:

5)刷新页面后,命令行输出效果如下图所示:

6)异常中间件效果演示:

+ 如果多个中间件中注册了相同的方法,则先注册的中间件后执行。

修改视图函数以触发异常,代码如下:

异常处理中间件测试


# 首页的视图函数
def index(request):
  print("index")
  raise Exception("value error")
  return render(request,'booktest/index.html')

对应的效果图如下所示:

4. Github代码地址:

https://github.com/ITXIAOKE/PythonMiddlewareDemo

希望本文所述内容能对大家基于Django框架进行Python程序设计有所帮助。

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

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 算法库。