Django переопределить auth_views.logout - PullRequest
4 голосов
/ 24 января 2012

Я пытаюсь выяснить, как я могу переопределить метод auth_views.logout.Обычно у меня не было бы проблем с переопределением методов класса, однако я понял, что пытаюсь переопределить представление, возможно ли это сделать в Django?

Причина, по которой я хочупереопределить представление, чтобы я мог добавить сообщение с messages.add_message, которое говорит: «Вы вышли из системы».Первоначально это было перенаправление на шаблон выхода из системы, однако я хотел сделать так, чтобы, когда кто-то выходит из системы, он перенаправлял на страницу входа, в настоящее время я делаю это через next_page в auth.urls.py

Спасибо

Ответы [ 3 ]

4 голосов
/ 24 января 2012
def my_logout(request):
     # message user or whatever
     return auth_views.logout(request)

Затем подключите my_logout в свой urls.py вместо значения по умолчанию auth_views.logout. (Конечно, вы можете изменить название представления на любое).

2 голосов
/ 24 января 2012

Ой, я просто перечитал ту часть, где вы говорите, что вам нужно сделать редирект. Ответ Криса сможет справиться с перенаправлением.


Для django 1.3 есть сигнал выхода, который задокументирован специально для этой цели.

Платформа аутентификации использует два сигнала, которые можно использовать для уведомления, когда пользователь входит в систему или выходит из нее.

https://docs.djangoproject.com/en/dev/topics/auth/#login-and-logout-signals

from django.contrib.auth.signals import user_logged_out

def logout_notifier(sender, request, user, **kwargs):
    messages.add_message(request, 'Thanks for logging out!')

user_logged_out.connect(logout_notifier)
0 голосов
/ 06 мая 2016

Вы можете использовать идею @Chris Pratt в качестве CBV, а затем подключить свой URLConf:

views.py

from django.contrib.auth import logout    

class LogoutView(View):

    template_name = 'registration/logged_out.html'

    def get(self, request):
        response = logout(request)

        return render(response, self.template_name)

urls.py

urlpatterns = [
    . . .
    url(r'^logout/$', LogoutView.as_view(), name='logout')
    . . .
]
...