[英]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.