Ответ 1
простое решение
просто удалите
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
от
MIDDLEWARE_CLASSES = (
...
...
)
в вашем проекте settings.py
тогда он должен работать!
Я запускаю virtualenv, чтобы попытаться изучить Django, но по какой-то причине после установки Django и когда я пытаюсь получить доступ к начальной странице Django по умолчанию, я получаю следующую ошибку в браузере:
Произошла ошибка сервера. Обратитесь к администратору.
В окне терминала, где я запускаю сервер, выдается следующая ошибка:
Неправильно Конфигурированный: Модуль "django.contrib.auth.middleware" не определяет атрибут/класс SessionAuthenticationMiddleware
Если у кого-то есть представление о том, почему я получаю эту ошибку в virtualenv, я был бы признателен. Тем не менее, я могу заставить сервер работать правильно в настройке, отличной от 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
простое решение
просто удалите
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
от
MIDDLEWARE_CLASSES = (
...
...
)
в вашем проекте settings.py
тогда он должен работать!
Я получал ту же ошибку. Но я забыл войти в свой VirtualEnv ПЕРЕД началом работы моего сервера.
Поэтому убедитесь, что с терминала вы сначала активируете virtualenv: source env/bin/activate
Затем запустите: python manage.py runserver
Обратитесь к doc, Django в вашем активном virtualenv должен быть Django 1.7. А:
Это промежуточное программное обеспечение должно появиться после django.contrib.auth.middleware.AuthenticationMiddleware в MIDDLEWARE_CLASSES
Решает ли ваша проблема?
бег
python3 manage.py runserver
вместо
python manage.py runserver
или
./manage.py runserver
Вы также можете отредактировать первую строку с заменой manage.py
\#!/usr/bin/env python
по
\#!/usr/bin/env python3
а затем запустите. /manage.py runningerver
(похоже, он работает, я не знаю, разрешен ли он проектом django)
Я создал проект Django с Django 1.7 и попытался запустить его с Django 1.6.8. И у меня такая же ошибка. Я только что удалил
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
от
MIDDLEWARE_CLASSES =
в моем проекте settings.py. И это работает.
Я столкнулся с проблемой, подобной этому сегодня (с использованием OS X Mavericks).
Прежде всего, у вас установлен django для вашей базовой ОС? Перед использованием Virtualenv я запускал Django непосредственно в ОС. Главное, что я заметил, я обычно набираю django-admin, а не django-admin.py. Это вызывало Django за пределами virtualenv, которое было версией 1.7.1.
Вне моего virtualenv я запустил pip удалить django, а затем вернулся в свой Virtualenv. Запуск django-admin --version без .py в конце возвращает "zsh: команда не найдена: django-admin" (она использовалась для возврата 1.7.1), однако при запуске django-admin.py --version возвращено 1.6. 5.
Убедитесь, что вы случайно не внесли наружную версию django прямо из вашей ОС, вам может потребоваться ввести django-admin.py
Похоже, вы используете версию 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.
Итак, я просто запустил новую установку своего виртуального сервера и запустил сервер, и теперь он работает как ожидалось. Проблема решена.
Убедитесь, что вы используете $source bin/activate из корня вашего проекта. В противном случае просто продолжайте и уничтожьте свой проект и создайте новый. И если вы хотите стать разработчиком django, будьте готовы сделать много виртуальных.
При работе с отдельными ветвями, например, иногда бывает проще иметь два разных виртуальных файла и т.д., и когда вы перейдете на сервер, вы, вероятно, будете работать и с virtualenv. Так что это хорошая идея, чтобы хорошо справиться с ними и пройти через шаги.
Легко копировать файлы между каталогами с помощью команды $cp.
Я использую версию Windows7/64, имел ту же ошибку. Согласился с user1776955, который указал на версию проблемы Django. поэтому самый простой способ - указать на Django-admin.py в оболочке. В моем случае это: python env\scripts\django-admin.py startproject my_django15_project
Просто запустите его в Python 3:
python3 manage.py runserver
Если это сработает, рассмотрите также применение некоторых миграций приложений через: python3 manage.py migrate
.
Как мы видим в примечания к выпуску Django 1.8
django.contrib.auth.middleware.SessionAuthenticationMiddleware была добавлено в Django 1.7.
И вы используете Django-1.6.5
в своей виртуальной среде, следовательно, ошибку does not define
.
Возможно, у вас установлена более новая версия Django в вашей "нормальной" среде, и сервер работает правильно. Чтобы исправить эту версию Django обновления в вашей виртуальной среде (перед обновлением Django обязательно активируйте свою виртуальную среду!)
Теперь, чтобы добавить мои два цента к ответам, потому что все до сих пор было повторением от ZZY и user1776955
Если вы запустите pip install -U Django
, вы, вероятно, столкнетесь со своей версией с чем-то выше 1.10, а затем примените следующее:
В Django 1.10 проверка сеанса будет включена независимо от независимо от того, включена ли SessionAuthenticationMiddleware (при которой точка SessionAuthenticationMiddleware не будет иметь никакого значения)
Следовательно, было бы безопасно удалить его, и если вы обновите его до версии 2.0, вы должны его удалить, потому что примечания к выпуску Django 2.0 сообщают, что
Также немного не связано, но актуально, когда обновление этой версии заключается в том, что
Поддержка промежуточного программного обеспечения старого стиля с использованием настроек. MIDDLEWARE_CLASSES удаляется
Насколько мне известно, достаточно изменить MIDDLEWARE_CLASSES
только на MIDDLEWARE
и удалить 'django.contrib.auth.middleware.SessionAuthenticationMiddleware'
из списка.