Всем доброе утро

Я использую django logout () для завершения моих сессий так же, как django docs говорит:

views.py

class Logout(View):
    def logout_view(request):
        logout(request) 
        return HttpResponseRedirect(reverse('cost_control_app:login'))

И я звоню из этого URL:

Urls.py

url(r'^logout/$', views.Logout.as_view(), name = "logout"),

Buttttttt это не работает, когда я делаю трассировку, я нахожу, что функция:

 def logout_view(request):

Он возвращает «нет» и вводит nos для выполнения кода внутри ...

Пожалуйста, помогите мне !

0
jsanchezs 16 Дек 2015 в 19:07

3 ответа

Лучший ответ

В Django есть встроенный {{X0 }} view. Я бы использовал это вместо того, чтобы писать свой собственный.

from django.contrib.auth import views as auth_views
from django.core.urlresolvers import reverse_lazy

url(r'^logout/$', 
    auth_views.logout, 
    {'next_page': reverse_lazy('cost_control_app:login')},
    name='logout',
)

Если вы хотите написать свой собственный вид logout, я бы остановился на представлении, основанном на функциях. Здесь нет необходимости использовать представление на основе классов. Документы по регистрации пользователя у есть пример.

def logout_view(request):
    logout(request)
    # Redirect to a success page.

Затем измените шаблон URL на

url(r'^logout/$', logout_view, name="logout"),

Если вы действительно хотите написать представление на основе классов, вам нужно исправить свое представление Logout. Смотрите ответ Джои для получения дополнительной информации об этом.

1
Alasdair 16 Дек 2015 в 16:40

Мне любопытно, почему у вас есть метод с именем logout_view()? По умолчанию ничего не будет вызывать этот метод. Вам нужно изменить имя, чтобы оно соответствовало глаголу HTTP, который будет использоваться для вызова страницы. Например, если это будет GET запрос, вы измените его на:

def get(self, request):

Если вы хотите, чтобы это был запрос POST, измените его на:

def post(self, request):

Это стандартный способ работы представлений классов в Django. Кроме того, вы можете посмотреть документацию для представлений на основе классов, так как это может дать вам лучшее представление об их работе и о том, что они могут предоставить вам. (Подсказка. Существует встроенный RedirectView )

2
Joey Wilhelm 16 Дек 2015 в 16:29

Решил, я просто удалил выход из класса (View) и вызвал def из URL без «as_view», и это работает. Спасибо всем !

0
jsanchezs 16 Дек 2015 в 16:37