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
solution facile
il suffit d'enlever
'Django.contrib.auth.middleware.SessionAuthenticationMiddleware',
de
MIDDLEWARE_CLASSES = (
...
...
)
dans votre projet settings.py
alors, ça devrait marcher!
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
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?
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:
É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.
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)
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.
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.
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.
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.
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
.
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
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'
J'ai corrigé l'erreur faire ce changement:
'social_Django.middleware.SocialAuthExceptionMiddleware',
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.