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

Django CSRF Token突然失效求助(已尝试多种排查方案)

Django CSRF Token突然失效(无代码变更)的排查与解决

核心问题定位

你提到Network面板看不到csrfmiddlewaretoken参数传递,这说明模板渲染时{% csrf_token %}未生成正确隐藏字段,或字段被前端逻辑意外移除。结合你已完成的排查,以下是针对性解决方案:

1. 验证模板渲染的实际输出

  • 右键页面查看源代码,确认<form>标签内是否存在<input type='hidden' name='csrfmiddlewaretoken' value='xxx'>字段:
    • 若不存在:检查模板是否被缓存(Django模板缓存、浏览器缓存),或模板继承时{% csrf_token %}所在区块被覆盖。
    • 若存在:排查前端JS代码,确认表单提交时未移除该字段(比如使用FormData时未包含、DOM操作误删等)。

2. 修正CSRF配置错误

你的CSRF_COOKIE_DOMAIN配置不符合Django规范:Django 4.x中该参数应为字符串,而非列表。列表格式会导致Cookie无法正确设置,进而引发Token失效。
修改settings.py:

# 错误写法
# CSRF_COOKIE_DOMAIN = ['127.0.0.1:8000', 'localhost:8000', 'dev.org']

# 正确写法(本地开发留空或设为None,自动适配域名)
CSRF_COOKIE_DOMAIN = None
# 生产环境针对dev.org可写:'.dev.org'(前缀点适配子域名)

本地开发时CSRF_TRUSTED_ORIGINS配置正确,但需确保请求协议与配置一致(比如本地用http则不要写成https)。

3. 确认中间件顺序

CsrfViewMiddleware的位置必须正确:需放在SessionMiddleware之后、AuthenticationMiddleware之前,顺序错误会导致Token生成异常。
settings.py中MIDDLEWARE示例:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',  # 位置正确
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

4. 排查隐性环境变更

即便你未主动更新版本,仍可能存在以下隐性变动:

  • 检查虚拟环境:执行pip freeze对比历史依赖快照,确认Django及相关包版本无变动。
  • 检查环境变量:确认未新增DJANGO_CSRF_COOKIE_NAME等变量覆盖默认配置。
  • 重启开发服务器:用python manage.py runserver --noreload启动,避免自动重载引发的缓存问题。

5. 纯HTML表单测试

暂时移除所有前端JS,用纯HTML表单测试提交:

<form method="post" action="/your-form-url/">
    {% csrf_token %}
    <input type="text" name="test">
    <button type="submit">提交</button>
</form>

若此时Network面板能看到csrfmiddlewaretoken参数,说明问题出在前端JS逻辑,而非Django后端。


内容的提问来源于stack exchange,提问作者Alex Enersen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:39:59