无法注销用户Django身份验证

时间:2018-10-26 09:14:56

标签: python django django-authentication

我正在研究一个项目,组织将在该项目上登录,然后根据需要注销。但是以某种方式注销功能不起作用。没有重定向发生,用户无法注销。

# urls.py
urlpatterns = [
    path('logout',views.user_logout,name = 'logout')
]

# views.py
def user_logout(request):
if request.method == "POST":
    logout(request)
    return HttpResponseRedirect('login')

# template:
<a href="#" onClick="document.getElementById('logoutform').submit()" class="btn">
Logout</a>
<form id="logoutform" method="POST" action="{% url 'logout' %}">
{% csrf_token %}
<input type="hidden">
</form>

页面仅重新加载,没有重定向发生。

1 个答案:

答案 0 :(得分:0)

我认为您已经使事情变得复杂了。 Django带有LogoutView,它允许使用GET请求注销。您可以使用该注销视图,也可以将自己的视图更改为:

from django.shortcuts import redirect

def user_logout(request):
    logout(request)
    return HttpResponseRedirect('login')  # assumes you have a URL pattern with name='login'.

请注意,HttpResponseRedirect('login')将重定向到相对URL 'login',因此您可能会以/logout/login结尾。您应该使用绝对URL(例如HttpResponseRedirect('/login/')),反向URL(例如return HttpResponseRedirect(reverse('login'))或使用redirect快捷方式,该快捷方式可以帮助您进行反向操作。

更改了退出视图后,您可以删除表单,只需链接到退出页面即可。

<a href="{% url 'logout' %}" onClick="document.getElementById('logoutform').submit()" class="btn">Logout</a>