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

时间:2014-09-16 23:02:45

标签: 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

13 个答案:

答案 0 :(得分:20)

简易解决方案

删除

'django.contrib.auth.middleware.SessionAuthenticationMiddleware',

MIDDLEWARE_CLASSES = (
...
...
)

在项目的 settings.py

然后,它应该工作!

答案 1 :(得分:18)

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

答案 2 :(得分:5)

参考doc,你活跃的virtualenv中的Django必须是Django 1.7。和

  

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

它能解决你的问题吗?

答案 3 :(得分:5)

正如我们在Django 1.8 release notes

中看到的那样
  

django.contrib.auth.middleware.SessionAuthenticationMiddleware was added in Django 1.7.

您在虚拟环境中使用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 release notes声明:

  

The SessionAuthenticationMiddleware class is removed. It provided no functionality since session authentication is unconditionally enabled in Django 1.10.

在更新到此版本时也有点不相关但相关

  

使用settings.MIDDLEWARE_CLASSES支持旧式中间件

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

答案 4 :(得分:3)

运行

python3 manage.py runserver

而不是

python manage.py runserver

./manage.py runserver

您还可以编辑manage.py替换

的第一行
\#!/usr/bin/env python

通过

\#!/usr/bin/env python3

然后运行./manage.py runserver

(它似乎有效,我不知道它是否得到django项目的授权)

答案 5 :(得分:2)

我用Django 1.7创建了一个Django项目,并试图用Django 1.6.8运行它。我也得到了同样的错误。我刚刚删除了

  

' django.contrib.auth.middleware.SessionAuthenticationMiddleware',

  

MIDDLEWARE_CLASSES =

在我的项目的settings.py中。 它有效。

答案 6 :(得分:2)

我今天遇到了类似的问题(使用OS X Mavericks)。

首先,您是否已将django安装到您的基本操作系统?在使用Virtualenv之前,我直接在操作系统上运行Django。我注意到的主要是我通常输入django-admin,而不是django-admin.py。这是在virtualenv之外调用Django,版本为1.7.1。

在我的virtualenv之外,我运行了 pip uninstall django ,然后又回到了我的Virtualenv。在最后运行django-admin --version而没有.py返回“zsh:command not found:django-admin”(它曾经返回1.7.1),但运行django-admin。 py --version返回1.6.5。

检查以确保您不会直接从操作系统中引入外部版本的django,您可能需要输入django-admin.py

答案 7 :(得分:2)

看起来你使用的是版本1.7之前的django版本(具体为1.6.4),并且直到django 1.7才引入SessionAuthenticationMiddleware。因此错误

可在此处找到文档 https://docs.djangoproject.com/en/1.7/ref/middleware/#django.contrib.auth.middleware.SessionAuthenticationMiddleware

在右下角,您可以选择django的版本。选择适当的版本,并按照特定于您正在使用的django版本的教程进行操作。

答案 8 :(得分:1)

所以,我刚刚运行了virtualenv的全新安装并启动了服务器,现在它按预期工作了。问题解决了。

答案 9 :(得分:0)

确保从项目的根目录运行$ source bin / activate。否则,请继续擦除您的项目并制作一个新项目。如果你想成为一个django dev,那就准备好制作很多virtualenv了。

例如,当处理不同的分支时,有时更容易拥有两个不同的virtualenv等,当你移动到服务器时,你可能也会从virtualenv运行。因此,善于制作并完成各个步骤是个好主意。

使用$ cp命令在目录之间复制文件很容易。

答案 10 :(得分:0)

我正在运行Windows7 / 64版本,出现了同样的错误。同意user1776955,他指出了Django的版本问题。 所以最简单的方法是指向shell中的Django-admin.py。就我而言,它是: python env \ scripts \ django-admin.py startproject my_django15_project

答案 11 :(得分:0)

只需在Python 3中运行它:

python3 manage.py runserver

如果可行,请考虑通过以下方式应用某些应用迁移:python3 manage.py migrate

答案 12 :(得分:0)

  1. 我有相同的错误:

    File "C:\Users\DANI3\Envs\recetario\lib\site-packages\django\utils\module_loading.py", line 23, in import_string
      return getattr(module, class_name)
    django.core.exceptions.ImproperlyConfigured: WSGI application 'recetario.wsgi.application' could not be loaded; Error importing module: 'Module "social_django.middleware" does not define a "SocialAythExceptionMiddleware" attribute/class'
    
  2. 我已更正错误,请执行以下更改:

    'social_django.middleware.SocialAuthExceptionMiddleware',