簡體   English   中英

Django注銷功能不起作用

[英]Django logout function is not working

我正在使用 Django 登錄和注銷功能,登錄功能有效,但注銷無效。

在我的 HTML 文件中,我有:

<a href="{% url 'django.contrib.auth.views.logout' %}">logout</a>
<a href="{% url 'django.contrib.auth.views.login' %}">login</a>

在我的 urls.py 文件中,我有:

url(r'^$', 'django.contrib.auth.views.login', {
    'template_name': 'blog/login.html'
    }),

url(r'^$', 'django.contrib.auth.views.logout', {
    'template_name': 'blog/logout.html'
    }),

當我登錄時,它工作得很好,我可以顯示登錄人的姓名。 但是當我注銷時,我仍然登錄,因為登錄的用戶名仍然顯示在橫幅區域。

在我的 HTML 文件中,我有:

{% if user.is_authenticated %}
    {{ user }}
{% endif %}

如果注銷功能有效,則不應顯示用戶名。 所以我假設它不起作用。

似乎是什么問題,任何幫助/方向將不勝感激。

提前致謝,

這里有幾個問題。

首先,登錄和注銷視圖的 URL 模式 ( '^$' ) 完全相同。 這意味着第二個(注銷)模式永遠不會被實際使用,因為第一個總是匹配的。 當您嘗試注銷時,第一個匹配的視圖是登錄視圖,因此您永遠無法注銷。

將其更改為:

from django.contrib.auth import views as auth_views

url(r'^login/$', auth_views.login, {
    'template_name': 'blog/login.html'
}, name='login'),

url(r'^logout/$', auth_views.logout, {
    'template_name': 'blog/logout.html'
}, name='logout'),

(請參閱有關使用身份驗證視圖文檔。)

然后在您的模板中,您需要使用它們的名稱(我在上面添加的)來引用 URL:

<a href="{% url 'logout' %}">logout</a>
<a href="{% url 'login' %}">login</a>

您當前的方法(將虛線路徑傳遞給 URL 函數) 自 Django 1.8 以來已被棄用,並在 Django 1.10 中被刪除,因此您應該停止使用它。

試試這個:

{% if request.user.is_authenticated %}
  Hello {{ request.user.username }}.
{% else %}
  Hello Guest
{% endif %}

還要確保在 INSTALLED_APPS 下的 settings.py 文件中的 Django 默認應用程序之前,您的應用程序設置首先出現,否則您的注銷模板不會被呈現,而是會顯示 Django 默認注銷頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM