【问题标题】:Django - ImproperlyConfigured: Module "django.contrib.auth.middleware"Django - 配置不当:模块“django.contrib.auth.middleware”
【发布时间】:2014-09-16 23:02:45
【问题描述】:

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

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

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

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

如果有人对我在 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

【问题讨论】:

  • 错误消息说它需要在MIDDLEWARE_CLASSES 设置中输入SessionAuthenticationMiddleware。你试过添加它吗?
  • 因为我在没有使用 virtualenv 的情况下做了完全相同的事情,所以我不知道我需要添加任何东西。我以前从来没有遇到过这个错误。我要输入什么条目?
  • 查看错误的路径,它指向django 1.6.5。 SessionAuthenticationMiddleware 是 django 1.7 中的新功能

标签: python django virtualenv


【解决方案1】:

简单的解决方案

删除

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

来自

MIDDLEWARE_CLASSES = (
...
...
)

在您项目的 settings.py

那么,它应该可以工作了!

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

    正如我们在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】:

      参考doc,你激活的 virtualenv 中的 Django 必须是 Django 1.7。并且:

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

      它能解决你的问题吗?

      【讨论】:

      • 如果是这样的话,没有人能够运行以前版本的 Django(我现在实际上正在运行 1.5 并且运行良好)。
      • 文档说“Django 1.7 中的新功能”。您的意思是您正在运行 1.5,并且您的 MIDDLEWARE_CLASSES 中有“SessionAuthenticationMiddleware”?这真是令人惊讶
      • 您的答案是正确的,但您没有指出使问题清晰的文档(而是您的链接指向 src 代码)。这是澄清链接:docs.djangoproject.com/en/dev/ref/middleware
      【解决方案5】:

      运行

      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的项目授权的)

      【讨论】:

      • 好 - 我的“manage.py”中有“python”并将其更改为“python3”,然后运行“./manage.py”并且它可以工作。
      【解决方案6】:

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

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

      来自

      MIDDLEWARE_CLASSES =

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

      【讨论】:

        【解决方案7】:

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

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

        在我的 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

        【讨论】:

          【解决方案8】:

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

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

          右下角可以选择django的版本。选择适当的版本,然后按照您使用的 django 版本的教程进行操作。

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

              确保您从项目的根目录运行 $ source bin/activate。否则,请继续清除您的项目并创建一个新项目。如果你想成为 django 开发者,请准备好制作大量的 virtualenv。

              例如,在单独的分支上工作时,有时拥有两个不同的 virtualenv 等会更容易,而当您移动到服务器时,您可能也会从一个 virtualenv 运行。因此,擅长制作它们并完成这些步骤是一个好主意。

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

              【讨论】:

                【解决方案11】:

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

                【讨论】:

                  【解决方案12】:

                  只需在 Python 3 中运行它:

                  python3 manage.py runserver
                  

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

                  【讨论】:

                    【解决方案13】:
                    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',
                      

                    【讨论】:

                      猜你喜欢
                      • 2015-08-27
                      • 1970-01-01
                      • 2019-07-07
                      • 1970-01-01
                      • 2014-02-05
                      • 2019-04-08
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多