web-dev-qa-db-de.com

Django - Nicht ordnungsgemäß konfiguriert: Modul "Django.contrib.auth.middleware"

Ich führe ein Virtualenv aus, um zu versuchen, Django zu lernen, aber aus irgendeinem Grund nach der Installation von Django und wenn ich versuche, auf die Standard-Django-Startseite zuzugreifen, erhalte ich die folgende Fehlermeldung im Browser:

Ein Serverfehler ist aufgetreten. Bitte wenden Sie sich an den Administrator.

Im Terminalfenster, auf dem der Server ausgeführt wird, wird folgende Fehlermeldung angezeigt:

Nicht ordnungsgemäß konfiguriert: Das Modul "Django.contrib.auth.middleware" definiert kein Attribut/Klasse "SessionAuthenticationMiddleware"

Wenn jemand einen Einblick hat, warum ich diesen Fehler in der virtuellen Umgebung erhalte, würde ich das begrüßen. Ich kann jedoch den Server in einem Nicht-Virtualenv-Setup ordnungsgemäß ausführen.

Hier ist der vollständige Stack-Trace:

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
26
Jason Rueckert

einfache Lösung  

einfach entfernen

'Django.contrib.auth.middleware.SessionAuthenticationMiddleware',

von

MIDDLEWARE_CLASSES = (
...
...
)

in Ihrem Projekt settings.py

dann sollte es funktionieren!

18
Shubham Badal

Ich habe den gleichen Fehler bekommen. Aber ich hatte vergessen, in meine VirtualEnv einzusteigen, BEVOR ich meinen Server betreibe .. Stellen Sie also sicher, dass Sie vom Terminal aus zuerst virtualenv aktivieren: source env/bin/activate Dann führen Sie aus: python manage.py runserver

18
Michael Romrell

Siehe doc . Der Django in Ihrem aktiven Virtualenv muss Django 1.7 sein. Und:

Diese Middleware muss nach Django.contrib.auth.middleware.AuthenticationMiddleware in MIDDLEWARE_CLASSES erscheinen

Löst es Ihr Problem?

5
ZZY

Wie wir in Django 1.8 Release Notes sehen können

Django.contrib.auth.middleware.SessionAuthenticationMiddleware war hinzugefügt in Django 1.7.

Und Sie verwenden Django-1.6.5 in Ihrer virtuellen Umgebung, daher der does not define-Fehler. 

Wahrscheinlich haben Sie eine neuere Version von Django in Ihrer "normalen" Umgebung installiert und der Server wird ordnungsgemäß ausgeführt. Um dieses Upgrade der Django-Version in Ihrer virtuellen Umgebung zu beheben, aktivieren Sie vor dem Aktualisieren von Django unbedingt Ihre virtuelle Umgebung!

Um nun meine zwei Cents zu den Antworten hinzuzufügen, da alles bis jetzt Wiederholung von ZZY und user1776955 war.

Wenn Sie pip install -U Django ausführen, werden Sie wahrscheinlich eine höhere Version als 1.10 verwenden. Dann gilt Folgendes:

In Django 1.10 wird die Sitzungsüberprüfung unabhängig von .__ aktiviert. ob SessionAuthenticationMiddleware aktiviert ist oder nicht (an diesem Punkt hat SessionAuthenticationMiddleware keine Bedeutung)

Daher ist es sicher, es zu löschen, und wenn Sie ein Update nach 2.0 durchführen, MÜSSEN Sie es löschen, da Django 2.0-Versionshinweise besagen,

Die SessionAuthenticationMiddleware-Klasse wird entfernt. Es stellte keine Funktionalität, da die Sitzungsauthentifizierung in .__ uneingeschränkt aktiviert ist. Django 1,10.

Ein wenig unzusammenhängend, aber relevant beim Update auf diese Version ist das 

Unterstützung für Middleware-Middleware mit Einstellungen.MIDDLEWARE_CLASSES wurde entfernt

Nach meiner Erfahrung reicht es aus, MIDDLEWARE_CLASSES in MIDDLEWARE zu ändern und 'Django.contrib.auth.middleware.SessionAuthenticationMiddleware' aus der Liste zu löschen.

4
Marko Prcać

lauf

python3 manage.py runserver

anstatt

python manage.py runserver

oder

./manage.py runserver

Sie können auch die erste Zeile von manage.py ersetzen

\#!/usr/bin/env python

durch

\#!/usr/bin/env python3

und dann ./manage.py runserver ausführen

(es scheint zu funktionieren, ich weiß nicht, ob es von Djangos Projekt autorisiert wurde)

3
Niilos

Ich habe ein Django-Projekt mit Django 1.7 erstellt und versucht, es mit Django 1.6.8 auszuführen. Und ich habe den gleichen Fehler bekommen. Ich habe gerade entfernt 

'Django.contrib.auth.middleware.SessionAuthenticationMiddleware',

von

MIDDLEWARE_CLASSES =

in meinen Projekteinstellungen.py . Und es funktioniert.

2
K.Karamazen

Es sieht so aus, als würden Sie eine Version von Django vor Version 1.7 verwenden (1.6.4, um genau zu sein), und SessionAuthenticationMiddleware wurde erst mit Django 1.7 eingeführt. Daher der Fehler

Die Dokumentation finden Sie hier https://docs.djangoproject.com/de/1.7/ref/middleware/#Django.contrib.auth.middleware.SessionAuthenticationMiddleware

Unten rechts können Sie die Version von Django auswählen. Wählen Sie die entsprechende Version aus und folgen Sie den Anleitungen für die von Ihnen verwendete Version von Django.

2
user1776955

Ich bin heute auf ein ähnliches Problem gestoßen (Using OS X Mavericks). 

Haben Sie zuerst Django auf Ihrem Basis-Betriebssystem installiert? Vor dem Einsatz von Virtualenv habe ich Django direkt auf dem Betriebssystem ausgeführt. Die Hauptsache, die mir aufgefallen ist, ist, dass ich normalerweise Django-admin und nicht Django-admin.py eingebe. Dies rief Django außerhalb der virtualenv, der Version 1.7.1, an. 

Außerhalb meiner Virtualenv bin ich pip Django deinstalliert und dann wieder in meine Virtualenv gegangen. Das Ausführen von Django-admin --version ohne .py am Ende lieferte "zsh: Befehl nicht gefunden: Django-admin" (es wurde früher 1.7.1 zurückgegeben), jedoch Django-admin.py ausgeführt - Version gab 1.6.5 zurück.

Stellen Sie sicher, dass Sie nicht versehentlich eine externe Version von Django direkt von Ihrem Betriebssystem importieren. Sie müssen möglicherweise Django-admin.py eingeben

2

Also habe ich gerade eine Neuinstallation meiner virtualenv durchgeführt und den Server gestartet. Problem gelöst.

1
Jason Rueckert

Führen Sie es stattdessen in Python 3 aus:

python3 manage.py runserver

Wenn dies funktionieren sollte, sollten Sie auch einige App-Migrationen mithilfe von python3 manage.py migrate anwenden.

0
kenorb

Ich verwende Windows7/64, hatte den gleichen Fehler. Einverstanden mit user1776955, der auf das Versionsproblem von Django hingewiesen hat. Der einfachste Weg ist, auf Django-admin.py in Shell zu zeigen. In meinem Fall ist dies: Python env\scripts\Django-admin.py startprojekt my_Django15_project

0
chao dai
  1. Ich habe den gleichen Fehler:

    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. Ich habe den Fehler korrigiert, um diese Änderung vorzunehmen:

    'social_Django.middleware.SocialAuthExceptionMiddleware',
    
0
Dantez Layton

Stellen Sie sicher, dass Sie $ source bin/enable vom Stammverzeichnis Ihres Projekts ausführen. Ansonsten machen Sie einfach weiter und löschen Sie Ihr Projekt und machen Sie ein neues. Und wenn Sie ein Django-Entwickler sein wollen, machen Sie sich bereit, eine Menge Virtualenvs zu machen.

Wenn Sie z. B. in separaten Zweigen arbeiten, ist es manchmal einfacher, zwei verschiedene Virtualenv-Dateien usw. zu haben. Wenn Sie zum Server wechseln, werden Sie wahrscheinlich auch von einer Virtualenv ausgeführt. Es ist also eine gute Idee, sie gut zu machen und die Schritte durchzugehen. 

Mit dem Befehl $ cp können Dateien leicht zwischen Verzeichnissen kopiert werden.

0
John Evans