AttributeError: модуль 'django.http.request' не имеет атрибута 'сессия' - PullRequest
0 голосов
/ 02 сентября 2018

Я хочу выйти из системы, но получаю эту ошибку: AttributeError: модуль 'django.http.request' не имеет атрибута 'session'

Вот мой код:

class logout_view(request):
logout(request)
print("-------------User Logging Out---------------")
redirect('essay:index')

Адрес:

 url(r'^logout/$', views.logout_view.as_view(), name='user_logout')

Middleware:

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

]

Не знаю, почему выдает ошибку о сеансе. Я использую Django 2.0

1 Ответ

0 голосов
/ 02 сентября 2018

Здесь вы смешали представления на основе классов и функций. Вы пытались написать класс и ссылались на него из URL как на класс, но на самом деле структурировали его как функцию с кодом в теле. Вы должны сделать это функцией:

def logout_view(request):
    logout(request)
    print("-------------User Logging Out---------------")
    return redirect('essay:index')

Обратите внимание, вам нужно вернуть ответ. И вы должны ссылаться на него из URL как функция:

url(r'^logout/$', views.logout_view, name='user_logout')

Однако это все бессмысленно, поскольку Django уже содержит представление на основе классов выхода из системы, которое вы должны просто импортировать в свой urls.py и напрямую ссылаться на него:

from django.contrib.auth.views import LogoutView
...
url(r'^logout/$', LogoutView.as_view(), name='user_logout')
...