2014-09-16 12 views
20

Sto eseguendo un virtualenv per provare ad imparare Django, ma per qualsiasi motivo dopo aver installato Django e quando provo ad accedere alla pagina iniziale di Django predefinita, ottengo il seguente errore nel browser:Django - ImproperlyConfigured: Modulo "django.contrib.auth.middleware"

A server error occurred. Please contact the administrator.

nella finestra di terminale in cui sto facendo funzionare il server dice il seguente errore:

ImproperlyConfigured: Module "django.contrib.auth.middleware" does not define a "SessionAuthenticationMiddleware" attribute/class

Se qualcuno ha qualche intuizione sul motivo per cui sto ottenendo questo errore nel virtualenv, lo apprezzerei. Posso però far funzionare correttamente il server in una configurazione non virtualenv.

Ecco la completa analisi dello stack:

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 
+0

Il messaggio di errore indica che è prevista una voce per 'SessionAuthenticationMiddleware' nelle impostazioni' MIDDLEWARE_CLASSES'. Hai provato ad aggiungerlo? – karthikr

+0

Dato che ho fatto esattamente la stessa cosa senza usare virtualenv, non sapevo di dover aggiungere nulla. Non ho mai avuto questo errore prima. Quale entrata dovrei fare? –

+4

Osservando i percorsi errati, punta a django 1.6.5. SessionAuthenticationMiddleware è nuovo in django 1.7 –

risposta

13

facile soluzione

sufficiente rimuovere

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

da

MIDDLEWARE_CLASSES = (
... 
... 
) 

in settings.py del progetto

poi, dovrebbe funzionare!

+18

Questo non risolve il problema sottostante che è che virtualenv non è impostato correttamente. – StvnW

+0

'sessionauthenticationmiddleware' è lì per qualche motivo. Questo può causare molti altri problemi. – Coderaemon

+1

Dai documenti Django 2.0, ["La classe SessionAuthenticationMiddleware viene rimossa. Non ha fornito alcuna funzionalità poiché l'autenticazione di sessione è abilitata in modo non condizionale in Django 1.10."] (Https://docs.djangoproject.com/it/2.0/releases/2.0/ – MikeyE

5

Fare riferimento alla doc, il Django nel virtualenv attiva deve essere Django 1.7. E:

This middleware must appear after django.contrib.auth.middleware.AuthenticationMiddleware in MIDDLEWARE_CLASSES

Risolve il problema?

+0

Se così fosse, nessuno sarebbe in grado di eseguire le versioni precedenti di Django (io in realtà Sto facendo funzionare 1.5 ora e funziona benissimo). –

+0

Il documento dice "Nuovo in Django 1.7". Vuoi dire che stai eseguendo 1.5, e c'è "SessionAuthenticationMiddleware" nel tuo MIDDLEWARE_CLASSES? Questo è abbastanza sorprendente – ZZY

+0

La tua risposta è corretta, ma non hai indicato la documentazione che rende chiara la domanda (invece il tuo link va al codice src). Ecco il link claryfying: https://docs.djangoproject.com/en/dev/ref/middleware/ – Timo

1

Quindi, ho appena eseguito una nuova installazione del mio virtualenv e ho avviato il server, e ora funziona come previsto. Problema risolto.

2

Ho creato un progetto Django con Django 1.7 e ho provato ad eseguirlo con Django 1.6.8. E ho avuto lo stesso errore. Ho appena tolto

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

da

MIDDLEWARE_CLASSES =

in settings.py del mio progetto. E funziona.

18

Stavo ottenendo lo stesso errore. Ma avevo dimenticato di entrare nel mio VirtualEnv PRIMA di eseguire il mio server. Quindi assicuratevi che dal terminale in primo luogo attivare virtualenv: source env/bin/activate Quindi eseguite: python manage.py runserver

2

Ho incontrato un problema simile a questo di oggi (Utilizzando OS X Mavericks).

Prima di tutto, hai installato Django sul tuo sistema operativo di base? Prima di utilizzare Virtualenv, eseguivo Django direttamente sul sistema operativo. La cosa principale che ho notato è che digito di solito django-admin, non django-admin.py. Questo stava chiamando Django al di fuori del virtualenv, che era la versione 1.7.1.

Al di fuori del mio virtualenv ho eseguito disinstallare django, quindi sono tornato nel mio Virtualenv.Esecuzione di django-admin --versione senza una .py alla fine restituita "zsh: comando non trovato: django-admin" (utilizzato per restituire 1.7.1), tuttavia, eseguendo django-admin.py --version restituito 1.6.5.

Controllare per assicurarsi che non si è accidentalmente portando in una versione al di fuori di Django direttamente dal vostro sistema operativo, potrebbe essere necessario digitare django-admin.py

3

corsa

python3 manage.py runserver 

invece di

python manage.py runserver 

o

./manage.py runserver 

è anche possibile modificare la prima linea di manage.py sostituzione

\#!/usr/bin/env python 

da

\#!/usr/bin/env python3 

e quindi eseguire ./manage.py runserver

(che sembra funzionare , Non so se è autorizzato dal progetto di django)

+0

good - Avevo "python" nel mio "manage.py" e l'ho cambiato in "python3", quindi ho eseguito "./manage.py" e funziona. – Timo

0

Assicurati di essere in esecuzione $ source bin/activate dalla radice del tuo progetto. Altrimenti, vai avanti e cancella il tuo progetto e creane uno nuovo. E se vuoi essere un dev di django, preparati a fare un sacco di virtualenv.

Quando si lavora su rami separati, ad esempio, a volte è più semplice avere due virtualenv diversi, ecc. E quando ci si sposta sul server probabilmente si eseguirà anche da una virtualenv. Quindi è una buona idea essere bravi a crearli e ad attraversare i passaggi.

È facile copiare i file tra le directory con il comando $ cp.

2

Sembra che si stia utilizzando una versione di django precedente alla versione 1.7 (1.6.4 per essere specifici) e SessionAuthenticationMiddleware non è stato introdotto fino a django 1.7. Da qui l'Errore di documentazione

può essere trovato qui https://docs.djangoproject.com/en/1.7/ref/middleware/#django.contrib.auth.middleware.SessionAuthenticationMiddleware

In basso a destra, è possibile scegliere la versione di Django. Seleziona la versione appropriata e segui il tutorial specifico per la versione di django che stai utilizzando.

0

Sono in esecuzione versione Windows 7/64, ha avuto lo stesso errore. D'accordo con user1776955, che ha sottolineato il problema della versione di Django. quindi il modo più semplice per fare è puntare a Django-admin.py nella shell. Nel mio caso, è: pitone env \ scripts \ django-admin.py startproject my_django15_project

0

Basta eseguirlo in Python 3 invece:

python3 manage.py runserver 

Se che avrebbe funzionato, considerare anche l'applicazione di alcune migrazioni app tramite: python3 manage.py migrate.

0

Come possiamo vedere nel Django 1.8 release notes

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

E si utilizza Django-1.6.5 nel vostro ambiente virtuale, quindi l'errore does not define.

Probabilmente hai installato una versione più recente di Django nel tuo ambiente "normale" e il server funziona correttamente. Per risolvere questo aggiornamento versione Django all'interno del vostro ambiente virtuale (Prima di aggiornare Django essere sicuri di attivare il tuo ambiente virtuale!)

Ora aggiungere i miei due centesimi alle risposte, perché tutto fino ad ora era la ripetizione da ZZY e user1776955

Se si esegue pip install -U Django si avrà probabilmente urtare la versione a qualcosa di superiore a 1,10 e poi la segue si applicherà:

In Django 1.10, session verification will be enabled regardless of whether or not SessionAuthenticationMiddleware is enabled (at which point SessionAuthenticationMiddleware will have no significance)

quindi sarà sicuro per eliminarlo e se si aggiorna passato 2.0 si dovrà eliminare perché.420.410.996,44321 milioni affermano che:

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

anche un po 'estraneo ma rilevanti durante l'aggiornamento a questa versione è che

Support for old-style middleware using settings.MIDDLEWARE_CLASSES is removed

quanto riguarda la mia esperienza va è sufficiente cambiare MIDDLEWARE_CLASSES a poco MIDDLEWARE ed eliminare 'django.contrib.auth.middleware.SessionAuthenticationMiddleware' da la lista.

Problemi correlati