【问题标题】:ImproperlyConfigured: Middleware module "django.middleware.csrf" does not define a "CsrfResponseMiddleware" class配置不当:中间件模块“django.middleware.csrf”未定义“CsrfResponseMiddleware”类
【发布时间】:2012-01-21 14:35:17
【问题描述】:

我的本​​地开发环境没有这个问题,但我只是用 nginx + gunicorn 部署了应用程序(第一次部署应用程序),每当我尝试发出请求时都会得到这个回溯。

2012-01-21 22:24:36 [5712] [ERROR] Error handling request
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/gunicorn/workers/sync.py", line 96, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/usr/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 219, in __call__
    self.load_middleware()
  File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 51, in load_middleware
    raise exceptions.ImproperlyConfigured('Middleware module "%s" does not define a "%s" class' % (mw_module, mw_classname))
ImproperlyConfigured: Middleware module "django.middleware.csrf" does not define a "CsrfResponseMiddleware" class

以下是我的settings.py文件的一部分

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.csrf.CsrfResponseMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

谁能指出我正确的方向?

【问题讨论】:

    标签: python django middleware


    【解决方案1】:

    看起来您部署的服务器具有不同版本的 Django(旧版本)。 Penthi 也是对的,CsrfResponseMiddleware 是为了向后兼容,应该删除。 https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#legacy-method.

    【讨论】:

    • 其实应该是最新的,1.3.1。我前几天刚安装。我进入csrf.py文件,发现CsrfResponseMiddleware类实际上并没有在里面定义...
    • 你是从trunk安装的吗?我刚刚下载了 1.3.1 存档,csrf.py 文件有CsrfResponseMiddleware。但它已在主干中删除 - code.djangoproject.com/browser/django/trunk/django/middleware/…
    • 啊,是的……我是从后备箱弄来的……以为我得到的是 1.3.1!
    【解决方案2】:

    在 Django 1.4 中,您应该删除“django.middleware.csrf.CsrfResponseMiddleware”,因为它会导致安全问题。

    此外,必须做两件事。

    1. 在您的帖子表单中添加{% csrf_token %} 标签。
    2. 在所有相关的views.py 文件中使用RequestContext 而不是Context

    【讨论】:

      【解决方案3】:

      在 Django 1.3 中,我的中间件中只有 django.middleware.csrf.CsrfViewMiddleware 才能使 CSRF 保护工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-27
        • 2020-12-08
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        • 2011-03-30
        • 1970-01-01
        • 2015-02-03
        相关资源
        最近更新 更多