Làm thế nào để định cấu hình nơi chuyển hướng sau khi đăng xuất trong Django?


88

Chỉ tự hỏi nơi tôi có thể đặt url để chuyển hướng đến sau khi đăng xuất. Tôi biết bạn có thể đặt url đăng nhập. Tôi muốn chuyển hướng đến trang chủ của mình.

Câu trả lời:


156

Modern Django (2017+?) Có một cài đặt được gọi là LOGOUT_REDIRECT_URL.

Djangos cũ hơn / Câu trả lời gốc

Bạn không cần phải ghi đè hoặc bọc bất cứ thứ gì.

Theo tài liệu, bạn chỉ có thể cung cấp next_pageđối số cho chế độ xem đăng xuất. 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
Điều này không hoạt động nếu bạn đã thực hiện nhập chung tất cả các url xác thực. Dễ dàng hơn để sử dụng câu trả lời của @ YeRuizhi bên dưới
RunLoop

@RunLoop Tôi chấp nhận phương pháp khác này. Vấn đề duy nhất là bạn phải nhớ sử dụng nó mỗi khi bạn xây dựng liên kết nói trên. Vì vậy, nếu điều này hoạt động trong một bản dựng tiêu chuẩn, thì nó đáng tin cậy hơn. Nếu không, thì giải pháp đơn giản nhất tiếp theo có ý nghĩa.
Yuji 'Tomita' Tomita

tôi không thể hiểu và làm thế nào để đảo ngược url này khỏi chế độ xem.
sao băng

Đây là một giải pháp tuyệt vời. Tôi đang đẩy nó ngay trở lại trang đăng nhập. Có cách nào để thêm thông báo hệ thống qua dòng này không? để tạo một cửa sổ bật lên? "Bạn đã đăng xuất thành công"
arcee123

Dấu gạch chéo chuyển tiếp ở đầu URL 'trang tiếp theo': '/ success_logged_out /' là rất quan trọng, nếu không có dấu gạch chéo, Django cố gắng nối URL "đăng xuất" với URL "thành công_logged_out", điều này tạo ra một URL 'bất hợp pháp' mới. Làm cho cuộc sống trở nên khó khăn nếu bạn muốn giới thiệu cho Người dùng Trang đăng nhập của bạn sau khi họ đăng xuất.
Rickka

60

Một cách dễ dàng hơn:

Thêm thông số 'tiếp theo' vào url yêu cầu đăng xuất của bạn. Ví dụ:

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

Sau đó, chế độ xem đăng xuất sẽ thực hiện thủ thuật cho bạn.

Đối với chuyển hướng sau khi đăng nhập, bạn chỉ cần đặt nó trong settings.py:

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

35
Kỳ lạ là không chỉ có thuộc tính LOGOUT_REDIRECT_URL.
Rob Grant,


16
Bây giờ chúng ta có năm 2017 và LOGOUT_REDIRECT_URL thực sự đang hoạt động :)
m.antkowicz

Câu trả lời tốt. Gắn bó điều này trong tôi base.htmlvà quên nó đi. : D (Tôi đang sử dụng cổ điển Django trên Debian Jessie:. S để các thiết lập mới không có sẵn)
underscore_d


13

Bạn có thể chuyển hướng người dùng ở bất kỳ đâu bằng cách sử dụng LOGOUT_REDIRECT_URL trong tệp setting.py của mình

LOGOUT_REDIRECT_URL = 'url name to redirect'

9

Chuyển hướng đến trang hiện tại

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

Đã thử nghiệm trong Django 1.9.

Xem thêm: Có thể chuyển các tham số truy vấn qua thẻ mẫu {% url%} của Django không?


1
Cảm ơn bạn, điều này đã giúp tôi trong trường hợp LOGOUT_REDIRECT_URL không (vì tôi có các con đường khác nhau trong môi trường thử nghiệm và sản xuất).
Dmytro Gierman


3

Từ tài liệu, bạn có thể viết chế độ xem đăng xuất của riêng mình (có thể chỉ là trình bao bọc đơn giản) ghi đè trang 'tiếp theo'.


3

Bạn thậm chí có thể sử dụng các url được đặt tên cho thông số tiếp theo của mình:

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

3

Nếu bạn muốn đặt URL chuyển hướng ở cấp máy khách, bạn có thể thực hiện điều đó trong urls.py:

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

Và sau đó trong mẫu:

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

Ở đâu next, bạn trỏ đến đúng URL.


1

Nếu bạn đã xác định các url của riêng mình (và không nhập url xác thực chung) và đang sử dụng các chế độ xem xác thực django tiêu chuẩn, bạn chỉ cần thêm chúng (template_name = 'example.html') vào đường dẫn.

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


0

thêm cái này vào tệp setting.py dự án của bạn LOGOUT_REDIRECT_URL = '/'

bạn có thể viết URL của mình giữa '' Tôi sử dụng trang chỉ mục của mình cho chuyển hướng mặc định đăng xuất

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.