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

Django中间件报错TypeError: object() takes no parameters 求助

解决Django中间件的TypeError: object() takes no parameters错误

这个错误我之前也踩过坑,几乎都是因为自定义中间件没遵循Django的接口规范导致的,大概率是你的中间件类的初始化或调用方法写得不对。下面给你拆解常见问题和正确的写法:

最常见的问题:__init__方法参数错误

Django 1.10+的类式中间件要求__init__方法必须接受get_response参数,如果你错误地定义了无参数的__init__,Django传递参数时就会触发这个错误。

错误写法:

class MyMiddleware:
    def __init__(self):
        # 这里没有接收get_response参数,直接报错
        pass

正确写法:

class MyMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # 这里可以写只执行一次的初始化代码(比如加载全局配置)

第二个常见问题:缺少__call__方法

新风格的中间件必须实现__call__方法,用来处理请求的前后逻辑。如果你的类只定义了__init__但没有__call__,也会引发错误。

完整的正确中间件示例:

# 假设在你的app目录下创建了middleware.py文件
class MyCustomMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # 服务器启动时只会执行一次的初始化操作

    def __call__(self, request):
        # --- 请求处理前的逻辑 ---
        # 比如记录请求时间、验证用户权限等
        print("开始处理请求前的前置操作")

        # 把请求传递给下一个中间件或视图
        response = self.get_response(request)

        # --- 请求处理后的逻辑 ---
        # 比如修改响应头、记录响应状态等
        print("请求处理完成后的后置操作")

        return response

最后检查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',
    # 你的自定义中间件,路径要对应实际位置
    'your_app_name.middleware.MyCustomMiddleware',
]

额外提醒

如果你还在使用Django 1.10之前的旧版本(不推荐),中间件是基于process_request、process_response等方法的类或函数式写法,但现在几乎都用新的类式规范了,建议优先适配新版本。

内容的提问来源于stack exchange,提问作者yg lin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:24:11