Jak skonfigurować miejsce przekierowania po wylogowaniu w Django?

88

Zastanawiam się tylko, gdzie mogę ustawić adres URL przekierowania po wylogowaniu. Wiem, że możesz ustawić adres URL logowania. Chcę przekierować do mojej strony głównej.

DJ.MaSs
źródło

Odpowiedzi:

156

Nowoczesne Django (2017+?) Ma ustawienie o nazwie LOGOUT_REDIRECT_URL.

Starsze Djangos / Oryginalna odpowiedź

Nie musisz niczego nadpisywać ani zawijać.

Zgodnie z dokumentacją możesz po prostu podać next_pageargument do widoku wylogowania. https://docs.djangoproject.com/en/dev/topics/auth/default/#django.contrib.auth.views.logout

(r'^logout/$', 'django.contrib.auth.views.logout',
                          {'next_page': '/successfully_logged_out/'})
Yuji „Tomita” Tomita
źródło
5
To nie działa, jeśli wykonałeś ogólny import wszystkich adresów URL autoryzacji. Łatwiejsza w użyciu odpowiedź @ YeRuizhi poniżej
RunLoop,
@RunLoop Akceptuję tę inną metodę. Jedynym problemem jest to, że musisz pamiętać, aby używać go za każdym razem, gdy budujesz wspomniany link. Więc jeśli to działa w standardowej wersji, jest bardziej niezawodne. Jeśli nie, to następne najłatwiejsze rozwiązanie ma sens.
Yuji 'Tomita' Tomita
nie mogę zrozumieć, jak odwrócić ten adres URL z widoku.
meteor
To świetne rozwiązanie. Wsuwam go z powrotem do strony logowania. Czy istnieje sposób na dodanie komunikatu systemowego również przez tę linię? aby utworzyć wyskakujące okienko? „Wylogowałeś się pomyślnie”
arcee123
Ukośnik na początku adresu URL „następnej strony”: „/ pomyślnie_logowany_wyjście /” jest niezbędny, bez niego Django próbuje połączyć adres URL „wylogowania” z adresem URL „pomyślnie_logowany_wylogowanie”, co tworzy nowy „nielegalny” adres URL. Trochę utrudnia życie, jeśli chcesz przedstawić Użytkownikom swoją stronę logowania po wylogowaniu.
Rickka
60

Jeden łatwiejszy sposób:

Dodaj parametr „next” do adresu URL żądania wylogowania. Na przykład:

<a href="{% url 'auth_logout' %}?next=/path_to_the_page"> Logout</a>

Wtedy widok wylogowania załatwi sprawę za Ciebie.

W przypadku przekierowania po zalogowaniu możesz po prostu ustawić go w settings.py:

LOGIN_REDIRECT_URL = '/path_to_the_page'
LOGIN_URL = '/path_to_the_page'
YeRuizhi
źródło
35
Dziwne, że nie ma tylko właściwości LOGOUT_REDIRECT_URL.
Rob Grant,
6
Już
Carl
16
Mamy już 2017 rok i LOGOUT_REDIRECT_URL faktycznie działa :)
m.antkowicz
Dobra odpowiedź. Wbijam to w siebie base.htmli zapominając o tym. : D (Używam klasycznego Django na Debianie Jessie: S, więc nowe ustawienia nie są dostępne.)
underscore_d
13

Możesz przekierować użytkownika w dowolne miejsce, używając LOGOUT_REDIRECT_URL w swoim pliku setting.py

LOGOUT_REDIRECT_URL = 'url name to redirect'
SACHIN CHAVAN
źródło
4

W widoku wylogowania, po wylogowaniu użytkownika na stałe, zwróć HttpResponseRedirect (url). Więcej informacji znajdziesz tutaj .

Ke Sun
źródło
3

Z dokumentów możesz napisać własny widok wylogowania (który może być po prostu prostym opakowaniem), nadpisując następną stronę.

Don
źródło
3

Możesz nawet użyć nazwanych adresów URL dla następnego parametru:

<a href="{% url 'auth_logout' %}?next={% url 'homepage' %}"> Logout</a>
blueFast
źródło
3

Jeśli chcesz ustawić adres URL przekierowania na poziomie klienta, możesz to zrobić w urls.py:

(r'^management/logout/$', 'django.contrib.auth.views.logout'),

A potem w szablonie:

<a href="{% url 'django.contrib.auth.views.logout' %}?next=/">
    Log out
</a>

Gdzie next, wskazujesz na właściwy adres URL.

Menda
źródło
1

Jeśli zdefiniowałeś własne adresy URL (i nie zaimportowałeś ogólnych adresów auth) i używasz standardowych widoków uwierzytelniania django, możesz je po prostu dodać (template_name = 'example.html') w ścieżce.

path('logout/',auth_views.LogoutView.as_view(template_name='homepage.html'),name="logout")

Dcode22
źródło
0

dodaj to w swoim pliku setting.py projektu LOGOUT_REDIRECT_URL = '/'

możesz wpisać swój adres URL między '' Używam mojej strony indeksu do domyślnego przekierowania wylogowania

Emad Mohammadpoor
źródło