![](/img/trans.png)
[英]Django logout function stopped working when creating userprofile function
[英]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.