You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 04:39:57