Django - 不正确的配置:模块"django.contrib.auth.middleware"

Jas*_*ert 29 python django virtualenv

我正在运行virtualenv尝试学习Django,但无论出于何种原因安装Django后,当我尝试访问默认的Django起始页时,我在浏览器中收到以下错误:

发生服务器错误.请联系管理员.

在我运行服务器的终端窗口中显示以下错误:

配置不当:模块"django.contrib.auth.middleware"未定义"SessionAuthenticationMiddleware"属性/类

如果有人知道为什么我在virtualenv中遇到这个错误,我会很感激.不过,我可以让服务器在非virtualenv设置中正确运行.

这是完整的堆栈跟踪:

Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/wsgiref/handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "/Users/jruecke/Python/JSON/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/core/handlers/wsgi.py", line 187, in __call__
    self.load_middleware()
  File "/Users/jruecke/Python/JSON/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/core/handlers/base.py", line 45, in load_middleware
    mw_class = import_by_path(middleware_path)
  File "/Users/jruecke/Python/JSON/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/utils/module_loading.py", line 31, in import_by_path
    error_prefix, module_path, class_name))
ImproperlyConfigured: Module "django.contrib.auth.middleware" does not define a "SessionAuthenticationMiddleware" attribute/class
[16/Sep/2014 22:44:30] "GET / HTTP/1.1" 500 59
Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/wsgiref/handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "/Users/jruecke/Python/JSON/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/core/handlers/wsgi.py", line 187, in __call__
    self.load_middleware()
  File "/Users/jruecke/Python/JSON/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/core/handlers/base.py", line 45, in load_middleware
    mw_class = import_by_path(middleware_path)
  File "/Users/jruecke/Python/JSON/lib/python2.7/site-packages/Django-1.6.5-py2.7.egg/django/utils/module_loading.py", line 31, in import_by_path
    error_prefix, module_path, class_name))
ImproperlyConfigured: Module "django.contrib.auth.middleware" does not define a "SessionAuthenticationMiddleware" attribute/class
Run Code Online (Sandbox Code Playgroud)

Shu*_*dal 23

简单解决方案

只是删除

'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
Run Code Online (Sandbox Code Playgroud)

MIDDLEWARE_CLASSES = (
...
...
)
Run Code Online (Sandbox Code Playgroud)

在你的项目的settings.py中

那么,它应该工作!

  • 这并没有解决潜在的问题,即virtualenv没有正确设置. (20认同)
  • 从Django 2.0文档中,["SessionAuthenticationMiddleware类被删除.它没有提供任何功能,因为在Django 1.10中无条件启用了会话认证."](https://docs.djangoproject.com/en/2.0/releases/2.0/) (15认同)
  • 由于某种原因,存在“sessionauthenticationmiddleware”。这可能会导致许多其他问题。 (2认同)

Mic*_*ell 18

我得到了同样的错误.但是我忘了在运行我的服务器之前进入我的VirtualEnv.因此,请确保从终端首先激活virtualenv:source env/bin/activate 然后运行:python manage.py runserver


Mar*_*cać 6

正如我们在Django 1.8发行说明中所看到的

django 1.7中添加了django.contrib.auth.middleware.SessionAuthenticationMiddleware。

而且您正在Django-1.6.5虚拟环境中使用,因此会does not define出现错误。

可能是您在“正常”环境中安装了较新版本的Django,并且服务器正常运行。要在您的虚拟环境中修复此升级Django版本(在更新Django之前,请确保激活您的虚拟环境!)

现在将我的两个美分添加到答案中,因为到目前为止,所有内容都是从ZZYuser1776955重复的

如果运行pip install -U Django,则您的版本可能会升至高于1.10的水平,然后执行以下操作:

在Django 1.10中,无论是否启用SessionAuthenticationMiddleware,都将启用会话验证(届时SessionAuthenticationMiddleware将不具有任何意义)

因此删除它是安全的,并且如果您更新到2.0以上,则必须删除它,因为Django 2.0发行说明指出:

SessionAuthenticationMiddleware类已删除。它没有提供任何功能,因为在Django 1.10中无条件地启用了会话身份验证。

在更新到此版本时,一点也​​不相关但相关的是

使用设置支持旧式中间件。MIDDLEWARE_CLASSES已删除

根据我的经验MIDDLEWARE_CLASSES,只需将其更改为正义MIDDLEWARE'django.contrib.auth.middleware.SessionAuthenticationMiddleware'从列表中删除即可。


ZZY*_*ZZY 5

请参阅doc,你活跃的virtualenv中的Django必须是Django 1.7.和:

此中间件必须出现在MIDDLEWARE_CLASSES中的django.contrib.auth.middleware.AuthenticationMiddleware之后

它能解决你的问题吗?