Django 4.1中auth LogoutView需POST请求:是否有内置表单获取CSRF?
Django 4.1 LogoutView 内置CSRF表单解决方案
Django 4.1 版本起,LogoutView 默认仅接受 POST 请求(原GET方式因安全风险被废弃),官方并未提供专门的内置登出表单类,但有两种简单的方式实现带CSRF令牌的POST登出请求:
直接手写模板表单(推荐)
利用Django内置的CSRF模板标签,无需额外定义表单类,直接在模板中编写:<form method="post" action="{% url 'logout' %}"> {% csrf_token %} <button type="submit">退出登录</button> </form>{% csrf_token %}会自动生成包含CSRF令牌的隐藏输入字段,满足LogoutView的请求验证要求。自定义极简表单类(可选)
若需复用表单结构,可定义一个无额外字段的表单类(仅作为表单载体):from django import forms class LogoutForm(forms.Form): pass # 无需添加字段,CSRF令牌仍通过模板标签注入在模板中使用该表单时,依然需要加入
{% csrf_token %}:<form method="post" action="{% url 'logout' %}"> {% csrf_token %} {{ form }} <button type="submit">退出登录</button> </form>
注意:原GET方式的登出链接(如<a href="{% url 'logout' %}">退出</a>)已不再生效,必须通过POST表单提交请求。
内容的提问来源于stack exchange,提问作者TaiwanGrapefruitTea
相关产品推荐
相关产品推荐

