วิธีกำหนดค่าตำแหน่งที่จะเปลี่ยนเส้นทางหลังจากออกจากระบบใน Django


91

แค่สงสัยว่าฉันจะตั้งค่า url ให้เปลี่ยนเส้นทางไปหลังออกจากระบบได้ที่ไหน ฉันรู้ว่าคุณสามารถตั้งค่า URL เข้าสู่ระบบได้ ฉันต้องการเปลี่ยนเส้นทางไปที่หน้าแรกของฉัน

คำตอบ:


156

Modern Django (2017+?) มีการตั้งค่าที่เรียกว่าLOGOUT_REDIRECT_URL.

Djangos ที่เก่ากว่า / คำตอบดั้งเดิม

คุณไม่จำเป็นต้องเขียนทับหรือห่ออะไร

ตามเอกสารคุณสามารถระบุnext_pageอาร์กิวเมนต์ในมุมมองการออกจากระบบได้ 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/'})

5
วิธีนี้จะใช้ไม่ได้หากคุณได้นำเข้า URL การตรวจสอบสิทธิ์ทั้งหมดแบบทั่วไป ใช้คำตอบของ @ YeRuizhi ด้านล่างได้ง่ายขึ้น
RunLoop

@RunLoop ฉันเห็นด้วยกับวิธีอื่นนี้ ปัญหาเดียวคือคุณต้องจำไว้ว่าให้ใช้ทุกครั้งที่คุณสร้างลิงค์ดังกล่าว ดังนั้นหากสิ่งนี้ใช้งานได้ในโครงสร้างมาตรฐานก็จะน่าเชื่อถือมากขึ้น ถ้าไม่เช่นนั้นวิธีแก้ปัญหาที่ง่ายที่สุดถัดไปก็สมเหตุสมผล
Yuji 'Tomita' Tomita

ฉันไม่สามารถขีดเส้นใต้และวิธีการย้อนกลับ URL นี้จากมุมมอง
ดาวตก

นี่เป็นทางออกที่ยอดเยี่ยม ฉันกำลังส่งกลับไปที่หน้าเข้าสู่ระบบ มีวิธีเพิ่มข้อความระบบผ่านไลน์นี้ด้วยหรือไม่? เพื่อสร้างป๊อปอัป? "คุณออกจากระบบเรียบร้อยแล้ว"
arcee123

เครื่องหมายทับที่จุดเริ่มต้นของ URL "หน้าถัดไป": "/ success_logged_out /" หากไม่มีสิ่งนี้ Django จะพยายามเชื่อมต่อ URL "ออกจากระบบ" เข้ากับ URL "success_logged_out" ซึ่งจะสร้าง URL ใหม่ที่ "ผิดกฎหมาย" ทำให้ชีวิตเป็นเรื่องยากหากคุณต้องการนำเสนอผู้ใช้ด้วยหน้าเข้าสู่ระบบของคุณหลังจากที่พวกเขาออกจากระบบ
Rickka

63

วิธีที่ง่ายกว่าวิธีหนึ่ง:

เพิ่มพารามิเตอร์ 'next' ใน URL คำขอออกจากระบบของคุณ ตัวอย่างเช่น:

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

จากนั้นมุมมองการออกจากระบบจะทำเคล็ดลับให้คุณ

สำหรับหลังจากเข้าสู่ระบบ - เปลี่ยนเส้นทางคุณสามารถตั้งค่าใน settings.py:

LOGIN_REDIRECT_URL = '/path_to_the_page'
LOGIN_URL = '/path_to_the_page'

35
แปลกที่ไม่ได้มีแค่คุณสมบัติ LOGOUT_REDIRECT_URL
Rob Grant

6
เร็ว ๆ นี้ ... docs.djangoproject.com/en/dev/ref/settings/…
Carl

16
ขณะนี้เรามีปี 2017 แล้วและ LOGOUT_REDIRECT_URL ใช้งานได้จริง :)
m.antkowicz

คำตอบที่ดี. ติดสิ่งนี้ไว้ในตัวฉันbase.htmlและลืมมันไป : D (ฉันใช้ Django วินเทจบน Debian Jessie: S ดังนั้นการตั้งค่าใหม่จึงไม่สามารถใช้ได้)
underscore_d


14

คุณสามารถเปลี่ยนเส้นทางผู้ใช้ได้ทุกที่โดยใช้ LOGOUT_REDIRECT_URL ในไฟล์ setting.py ของคุณ

LOGOUT_REDIRECT_URL = 'url name to redirect'

9

เปลี่ยนเส้นทางไปยังหน้าปัจจุบัน

<a href="{% url 'logout' %}?next={{ request.path | urlencode }}">{% trans "Logout" %}</a>

ทดสอบใน Django 1.9

ดูเพิ่มเติม: เป็นไปได้ไหมที่จะส่งพารามิเตอร์การค้นหาผ่านแท็กเทมเพลต {% url%} ของ Django


1
ขอบคุณสิ่งนี้ช่วยฉันได้ในกรณีที่ LOGOUT_REDIRECT_URL ไม่มี (เพราะฉันมีเส้นทางที่แตกต่างกันในสภาพแวดล้อมการทดสอบและการผลิต)
Dmytro Gierman


4

คุณยังสามารถใช้ชื่อ urls สำหรับพารามิเตอร์ถัดไปของคุณ:

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

3

จากเอกสารคุณสามารถเขียนมุมมองการออกจากระบบของคุณเอง (ซึ่งอาจเป็นเพียงเสื้อคลุมธรรมดา ๆ ) ซึ่งทับหน้า 'ถัดไป'


3

หากคุณต้องการตั้งค่า URL การเปลี่ยนเส้นทางในระดับไคลเอนต์คุณสามารถทำได้ในurls.py:

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

จากนั้นในเทมเพลต:

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

ในกรณีที่nextคุณชี้ไปที่ URL ที่เหมาะสม


1

หากคุณได้กำหนด URL ของคุณเอง (และไม่ได้นำเข้า URL การตรวจสอบสิทธิ์ทั่วไป) และกำลังใช้มุมมองการตรวจสอบสิทธิ์ django มาตรฐานคุณสามารถเพิ่ม (template_name = 'example.html') ในเส้นทางได้

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


0

เพิ่มสิ่งนี้ในไฟล์ setting.py โครงการของคุณ LOGOUT_REDIRECT_URL = '/'

คุณสามารถเขียน URL ของคุณระหว่าง '' ฉันใช้หน้าดัชนีของฉันสำหรับการออกจากระบบการเปลี่ยนเส้นทางเริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.