Django中间件:不是中间件模块错误。

4

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

但是,当我将中间件添加到MIDDLEWARE_CLASSES时,我会收到以下错误:

ImproperlyConfigured: isn't a middleware module.

我的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',)

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


请展示您的MIDDLEWARE_CLASSES设置。 - Dominic Rodger
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', ) - sbidwai
是的,导入在shell中可以工作。 - sbidwai
1
TempMiddleware是什么 - 这个要点涉及到XsSharing - Dominic Rodger
看起来你需要设置XS_SHARING_ALLOWED_ORIGINS,不管它是什么意思。 - Dominic Rodger
显示剩余3条评论
2个回答

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

谢谢,我现在明白了。但是尽管后端现在正在工作,我仍然遇到以下错误。Origin http://127.0.0.1 is not allowed by Access-Control-Allow-Origin. - sbidwai

2

编辑:

TempMiddleware 无法导入。这是类的名称,您必须放置整个导入路径。

例如:

'django.contrib.auth.middleware.AuthenticationMiddleware'

而不是

'AuthenticationMiddleware'

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

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

可能的原因:

  • 您添加了一个未声明中间件方法的中间件:通过删除您添加的最后一个中间件来解决此问题
  • 您添加了一个正确的中间件,但是忘记在名称末尾放置逗号,因此字符串被连接在一起,导致django认为有两个中间件实际上是一个:通过添加缺失的逗号来解决此问题

你提到的两件事似乎都不是问题。 - sbidwai
然后回答@Dominic Rodger - Bite code
上面发布了设置。让我知道这里可能有什么问题。对Django非常新手。 :) - sbidwai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接