Объект WSGIRequest не имеет атрибута "сеанс" при обновлении с django 1.3 до 1.9

Подобно этому вопросу Объект WSGIRequest не имеет атрибута 'session'

Но мои классы MIDDLEWARE находятся в правильном порядке.

INSTALLED_APPS = [
    'django.contrib.sessions',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'membership',
    'treebeard',
    'haystack',
    'reversion',
]

MIDDLEWARE = [
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Я перенаправляю логин

url(r'^$',  RedirectView.as_view(url='login/')),
url(r'^login/$', 'membership.views.loginView', name='login'),

а затем

def loginView(request):
    a = request.session

Выдает ошибку

Ответ 1

MIDDLEWARE - новый параметр в 1.10, который заменит старый MIDDLEWARE_CLASSES.

Так как вы в настоящее время на 1.9, Django не распознает параметр MIDDLEWARE. Вместо этого вы должны использовать MIDDLEWARE_CLASSES:

MIDDLEWARE_CLASSES = [
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Ответ 2

Django 2.0

Вы можете попробовать это в своих settings.py, MIDDLEWARE_CLASSES = [....]:

  • Измените MIDDLEWARE_CLASSES= [...] на MIDDLEWARE= [...]

  • Удалите SessionAuthenticationMiddleware из списка MIDDLEWARE = ​​[...].

Значение MIDDLEWARE_CLASSES устарело в Django 1.10 и удален в Django 2.0.

Класс SessionAuthenticationMiddleware удален. Он не предусматривал никаких функциональность, поскольку аутентификация сеанса безоговорочно включена в Django 1.10.

Ответ 3

Проверьте порядок промежуточного программного обеспечения, если вы пытаетесь получить к нему доступ на некоторых промежуточных продуктах, перечисленных выше промежуточного ПО сеанса, вы получите эту ошибку.

Ответ 4

Эта ошибка также может быть выдана, когда у вас есть опечатка. т.е.

request.sesion ... 

вместо

request.session ...