4

我正在使用https://gist.github.com/426829中提供的中间件来执行跨站点脚本。

但是,当我将中间件添加到 时MIDDLEWARE_CLASSES,出现错误:

配置不当:不是中间件模块。

我的MIDDLEWARE_CLASSES样子是这样的:

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

我没有更改要点中的任何代码。process_requestprocess_response方法在那里。我在 Ubuntu 上运行最新版本的 Python 和 Django。

4

2 回答 2

3

是什么TempMiddleware?模块名,还是类名?正如您在其他条目中看到的那样,您需要实际类的完全限定的 Python 路径。如果TempMiddleware是模块的名称,则需要TempMiddleware.MyMiddlewareClass(并且您应该真正遵循PEP8命名约定) - 如果是类的名称,则需要my_module.TempMiddleware.

于 2012-01-16T09:58:38.200 回答
2

编辑:

TempMiddleware不可导入。它是类的名称,你必须把整个导入路径。

例如:

'django.contrib.auth.middleware.AuthenticationMiddleware'

并不是

'AuthenticationMiddleware'

所以如果你的类在 app_name/middleware.py 中,它应该是

app_name.middlaware.TempMiddleware

这只是意味着在您的设置文件中,该变量MIDDLEWARE_CLASSES包含一个模块列表,其中列出的模块之一不是中间件。

可能的原因:

  • 您添加了一个未声明中间件方法的中间件:通过删除您添加的最后一个中间件来解决此问题
  • 您添加了正确的中间件,但忘记在名称末尾添加逗号,因此字符串被连接起来,这使 django 认为 2 个中间件实际上是一个:通过添加缺少的 coma 来解决此问题
于 2012-01-16T09:32:53.767 回答