Django自定义中间件报错:MiddlewareMixin.__init__缺少get_response参数
问题排查与修复方案
1. 检查自定义中间件的继承与初始化逻辑
Django 5.0 里MiddlewareMixin已被标记为过时,错误核心是中间件初始化时未正确传递get_response参数,可按两种方式修正:
方式一:推荐写法(不依赖Mixin)
直接实现中间件的__init__和__call__方法:
class JWTAuthMiddleware: def __init__(self, get_response): self.get_response = get_response # 这里写自定义初始化逻辑 def __call__(self, request): # 请求到达视图前的处理逻辑 response = self.get_response(request) # 请求返回后的处理逻辑 return response
方式二:兼容旧写法(使用Mixin)
如果坚持继承MiddlewareMixin,必须确保初始化时调用父类方法并传递参数:
from django.utils.deprecation import MiddlewareMixin class JWTAuthMiddleware(MiddlewareMixin): def __init__(self, get_response=None): super().__init__(get_response) # 自定义初始化逻辑
2. 修正settings.py中的中间件注册
确保MIDDLEWARE列表里注册的是中间件类,而非实例:
错误写法:
MIDDLEWARE = [ 'myapp.middleware.JWTAuthMiddleware()', # 手动实例化会导致参数缺失 ... ]
正确写法:
MIDDLEWARE = [ 'myapp.middleware.JWTAuthMiddleware', ... ]
Django会自动传入get_response参数完成实例化,无需手动处理。
3. 排查手动实例化中间件的场景
如果在视图或其他代码里手动创建了中间件实例(比如middleware = JWTAuthMiddleware()),必须传递get_response参数,或者直接移除这类手动实例化操作——中间件应由Django框架统一管理。
4. 验证依赖版本兼容性
确保djangorestframework、djangorestframework-simplejwt等依赖包适配Django 5.0,可执行命令更新:
pip install --upgrade djangorestframework djangorestframework-simplejwt
内容的提问来源于stack exchange,提问作者Bilal Tufail
相关产品推荐
相关产品推荐

