2015-12-16 3 views
0

утро всемДжанго выход из системы() возвращает ни один

Im используя Джанго выход из системы(), чтобы закончить свои занятия так же, как Джанго документы говорит:

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): 

он никогда возвращения «NONE», и это н.у.к. ввода, чтобы выполнить код внутри ...

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

+0

Какой "django docs"? https://docs.djangoproject.com/en/1.9/topics/auth/default/#django.contrib.auth.logout говорит что-то еще. –

ответ

1

Django имеет встроенный вид logout. Я бы использовал это вместо того, чтобы писать свои собственные.

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 вид, то я бы придерживаться с точки зрения на основе функции. Здесь нет необходимости использовать представление класса. Например, в документах на logging a user out.

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

Затем измените шаблон URL-адрес для

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

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

+0

Точно, только что узнал, что пытается, спасибо много! – jsanchezs

2

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

def get(self, request): 

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

def post(self, request): 

Это стандартный способ представления классов в Django. Кроме того, вы можете посмотреть на documentation for class-based views, так как это может дать вам лучшее представление об их работе и том, что они могут вам предоставить. (Подсказка: есть встроенный RedirectView)

0

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

Смежные вопросы