我正在研究一个项目,组织将在该项目上登录,然后根据需要注销。但是以某种方式注销功能不起作用。没有重定向发生,用户无法注销。
# 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>
页面仅重新加载,没有重定向发生。
答案 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>