You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中CSRF验证失败求助:已添加{% csrf_token %}仍报错

解决Django CSRF验证失败的问题

老兄,一眼就瞅出你的问题根源了——你把{% csrf_token %}放在<head>标签里了,这完全不符合Django的要求啊!

Django的CSRF令牌必须放在提交数据的<form>标签内部,因为浏览器会在POST请求时把这个令牌字段一起发送给后端,放在<head>里的话,表单提交根本带不走这个令牌,自然会报“token missing or incorrect”的错误。

正确的写法应该是这样:

先给你的表单内容套上<form>标签,然后把{% csrf_token %}放在<form>里面,比如:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <!-- 这里别放csrf_token! -->
</head> 
<body> 
    <div class="alert-success"> 
        {% if messages %} {{ message }} {% endif %} 
    </div> 
    <div class='container'> 
        <h1>{% if user.is_authenticated %}...{% endif %}</h1>
        <!-- 重点:用form包裹表单内容,csrf_token放这里面 -->
        <form method="POST" action="{% url '你的提交路由名称' %}">
            {% csrf_token %} <!-- 必须放在form内部! -->
            <!-- 你的表单字段,比如输入框、下拉框、提交按钮等 -->
            <button type="submit">提交</button>
        </form>
    </div>
</body> 
</html>

另外再检查这几个细节,确保万无一失:

  • 确认你的函数视图加了@csrf_protect装饰器,类视图默认继承View就会包含CSRF验证(除非你特意排除了)
  • 检查表单的method属性是不是POST——GET请求不需要CSRF令牌,但POST请求必须要有
  • 试试清除浏览器的缓存和Cookie,有时候旧的令牌缓存会导致不匹配
  • 打开Django的settings.py,确认MIDDLEWARE列表里包含django.middleware.csrf.CsrfViewMiddleware(默认是启用的,如果被注释掉了就会出问题)

按照上面的步骤改完,应该就能解决这个CSRF验证失败的问题了!

内容的提问来源于stack exchange,提问作者Ankush paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:59:30