在使用 DJango 框架使用框架默认的【登出】视图时,发现报错如下:
Method Not Allowed (GET): /user/logout/
Method Not Allowed: /user/logout/
退出部分的代码原先如下(登出部分见第6行):
<p><a href="{% url 'learning_logs:index' %}">首页</a><a href="{% url 'learning_logs:topics' %}">主题</a>{% if user.is_authenticated %}你好,{{ user.username }},欢迎您登录^^<a href="{% url 'users:logout' %}">登出</a>{% else %}<a href="{% url 'users:login' %}">登录</a>{% endif %}
</p>{% block content %}{% endblock content %}
原因是 DJango 版本从 5 之后,需要通过 POST 请求来完成登出操作,POST请求可以防止 cross-site 请求伪造 CSRF。因此,需要在登出模板中使用 mini-form 实现请求。
代码修改为如下:
<p><a href="{% url 'learning_logs:index' %}">首页</a><a href="{% url 'learning_logs:topics' %}">主题</a>{% if user.is_authenticated %}你好,{{ user.username }},欢迎您登录^^<form method="post" action="{% url 'users:logout' %}">{% csrf_token %}<button type="submit">登出</button></form>{% else %}<a href="{% url 'users:login' %}">登录</a>{% endif %}
</p>{% block content %}{% endblock content %}
修改后【登出】操作即可正常注销登录信息并跳转到登出提示页面。