为什么注销作为GET请求而不是POST请求工作?

时间:2020-07-21 17:07:47

标签: python django authentication logout

这是html文件

<a class="nav-link" href="{% url 'logout' %}">Logout</a>
<form action="{% url 'logout' %}" method="POST" id ="logout">
 {% csrf_token %}
<input type ="hidden">
 </form> 

此代码在view.py中。

def logout(request):
    if request.method == 'POST':
        print("post-request")
        auth.logout(request)
        return redirect('index')
    else:
        print(request.method)
        auth.logout(request)
        return redirect ('index')

为什么注销是GET请求而不是POST请求? 我根据文档对项目进行了一些更改,但无法理解为什么可以使用GET请求成功注销。 https://docs.djangoproject.com/en/3.0/topics/auth/default/

1 个答案:

答案 0 :(得分:0)

您的注销在带有链接的<a>标记中,该链接发送GET请求,并且注销表单不在该<a>标记之外。并且您当前正在使用链接,因此表单未用于注销。

您可能需要这样的东西:

<form action="{% url 'logout' %}" method="POST" id ="logout" class="nav-link">
    {% csrf_token %}
    <input type="submit" value="Logout">
</form>