Django注销功能不起作用

时间:2016-08-17 00:37:17

标签: python django

我使用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 %}

如果注销功能有效,则不应显示用户名。所以我假设它不起作用。

什么似乎是问题,任何帮助/方向将不胜感激。

提前致谢,

3 个答案:

答案 0 :(得分:2)

这里有几个问题。

首先,对于登录和注销视图,您具有完全相同的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'),

(参见documentation on using the authentication views。)

然后在您的模板中,您需要使用他们的名称(我在上面添加)来引用网址:

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

您当前的方法(将虚线路径传递给URL函数)已经deprecated since Django 1.8并在Django 1.10中删除了,因此您应该停止使用它。

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:0)

还要确保您的应用程序设置位于INSTALLED_APPS下settings.py文件中的Django默认应用程序之前,否则您的注销模板将不会呈现,而将显示Django默认注销页面。