web-dev-qa-db-fra.com

Django - ImproperlyConfigured: Module "Django.contrib.auth.middleware"

J'utilise virtualenv pour essayer d'apprendre Django, mais pour une raison quelconque, après avoir installé Django et lorsque j'essaie d'accéder à la page de démarrage par défaut de Django, l'erreur suivante s'affiche dans le navigateur:

Une erreur de serveur s'est produite. S'il vous plaît contacter l'administrateur.

Dans la fenêtre du terminal sur lequel j'exécute le serveur, l'erreur suivante est générée:

ImproperlyConfigured: le module "Django.contrib.auth.middleware" ne définit pas d'attribut/classe "SessionAuthenticationMiddleware"

Si quelqu'un comprend pourquoi je reçois cette erreur dans la virtualenv, je l'apprécierais. Je peux toutefois obtenir que le serveur fonctionne correctement dans une configuration non virtuelle.

Voici la trace de pile complète:

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

solution facile  

il suffit d'enlever

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

de

MIDDLEWARE_CLASSES = (
...
...
)

dans votre projet settings.py

alors, ça devrait marcher!

18
Shubham Badal

J'avais la même erreur. Mais j’avais oublié de me connecter à VirtualEnv AVANT d’exécuter mon serveur . Assurez-vous donc que depuis le terminal vous activez d’abord virtualenv: source env/bin/activate, puis exécutez: python manage.py runserver

18
Michael Romrell

Reportez-vous au doc , le Django dans votre virtualenv actif doit être Django 1.7. Et:

Ce middleware doit apparaître après Django.contrib.auth.middleware.AuthenticationMiddleware dans MIDDLEWARE_CLASSES.

Cela résout-il votre problème?

5
ZZY

Comme nous pouvons le voir dans Notes de publication de Django 1.8

Django.contrib.auth.middleware.SessionAuthenticationMiddleware était ajouté dans Django 1.7.

Et vous utilisez Django-1.6.5 dans votre environnement virtuel, d'où l'erreur does not define

Vous avez probablement une version plus récente de Django installée dans votre environnement "normal" et le serveur fonctionne correctement. Pour corriger cette version de mise à niveau de Django dans votre environnement virtuel (avant de mettre à jour Django, assurez-vous d'activer votre environnement virtuel!)

Ajoutons maintenant mes deux sous aux réponses, parce que tout était jusqu’à présent répété de ZZY et user1776955

Si vous exécutez pip install -U Django, votre version sera probablement supérieure à 1.10, et les cas suivants s'appliqueront:

Dans Django 1.10, la vérification de session sera activée indépendamment de si SessionAuthenticationMiddleware est activé ou non (à quel point point SessionAuthenticationMiddleware n'aura aucune signification)

Par conséquent, vous pourrez le supprimer en toute sécurité. Si vous mettez à jour la version 2.0, vous devez le supprimer car les notes de publication de Django 2.0 indiquent que:

La classe SessionAuthenticationMiddleware est supprimée. Il a fourni n ° __. fonctionnalité puisque l’authentification de session est activée sans condition dans Django 1.10.

Également un peu indépendant mais pertinent lors de la mise à jour vers cette version est que 

La prise en charge des middlewares de style ancien à l'aide de settings.MIDDLEWARE_CLASSES est supprimée.

D'après mon expérience, il suffit de changer MIDDLEWARE_CLASSES en MIDDLEWARE et de supprimer 'Django.contrib.auth.middleware.SessionAuthenticationMiddleware' de la liste.

4
Marko Prcać

courir

python3 manage.py runserver

au lieu de

python manage.py runserver

ou

./manage.py runserver

Vous pouvez également éditer la première ligne de manage.py en remplaçant

\#!/usr/bin/env python

par

\#!/usr/bin/env python3

puis exécutez ./manage.py runserver

(ça a l'air de marcher, je ne sais pas si c'est autorisé par le projet de Django)

3
Niilos

J'ai créé un projet Django avec Django 1.7 et essayé de l'exécuter avec Django 1.6.8. Et j'ai la même erreur. Je viens de retirer 

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

de

MIDDLEWARE_CLASSES =

dans le fichier settings.py ..__ de mon projet. Et cela fonctionne.

2
K.Karamazen

Il semble que vous utilisiez une version de Django antérieure à la version 1.7 (la version 1.6.4 devait être spécifique) et SessionAuthenticationMiddleware n'a pas été introduit avant Django 1.7. D'où l'erreur

La documentation est disponible ici https://docs.djangoproject.com/en/1.7/ref/middleware/#Django.contrib.auth.middleware.SessionAuthenticationMiddleware

En bas à droite, vous pouvez choisir la version de Django. Sélectionnez la version appropriée et suivez le tutoriel spécifique à la version de Django que vous utilisez.

2
user1776955

J'ai rencontré un problème similaire à celui d'aujourd'hui (Utiliser OS X Mavericks). 

Tout d’abord, Django est-il installé sur votre système d’exploitation de base? Avant d’utiliser Virtualenv, j’exécutais Django directement sur le système d’exploitation. La chose principale que j'ai remarquée est que je tape généralement Django-admin, pas Django-admin.py. Cela appelait Django en dehors de virtualenv, la version 1.7.1. 

En dehors de mon virtualenv, j'ai lancé pip, désinstaller Django , puis je suis retourné dans mon Virtualenv. L'exécution de Django-admin --version sans un fichier .py à la fin renvoyait "zsh: commande introuvable: Django-admin" (auparavant, il retournait la version 1.7.1). version renvoyée 1.6.5.

Assurez-vous de ne pas importer accidentellement une version externe de Django directement à partir de votre système d'exploitation. Vous devrez peut-être taper Django-admin.py.

2
Cameron Carranza

Donc, je viens juste de lancer une nouvelle installation de virtualenv et de démarrer le serveur, et maintenant cela fonctionne comme prévu. Problème résolu.

1
Jason Rueckert

Il suffit de l’exécuter en Python 3 à la place:

python3 manage.py runserver

Si cela fonctionne, envisagez également d'appliquer certaines migrations d'application via: python3 manage.py migrate.

0
kenorb

J'exécute la version Windows7/64, avait la même erreur. D'accord avec user1776955, qui a signalé le problème de version de Django. La manière la plus simple de faire est de pointer vers le fichier Django-admin.py dans Shell. Dans mon cas, il s’agit de: Python env\scripts\Django-admin.py startproject my_Django15_project

0
chao dai
  1. J'ai la même erreur:

    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. J'ai corrigé l'erreur faire ce changement:

    'social_Django.middleware.SocialAuthExceptionMiddleware',
    
0
Dantez Layton

Assurez-vous que vous utilisez $ source bin/activate à partir de la racine de votre projet. Sinon, effacez votre projet et créez-en un nouveau. Et si vous voulez devenir un développeur Django, préparez-vous à créer de nombreuses virtualenv.

Lorsque vous travaillez sur des branches distinctes, par exemple, il est parfois plus facile d’avoir deux virtualenv différents, etc. et lorsque vous passez au serveur, vous exécuterez probablement également virtualenv. C'est donc une bonne idée de bien les fabriquer et de suivre les étapes. 

Il est facile de copier des fichiers entre des répertoires avec la commande $ cp.

0
John Evans