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

无需以超级用户登录访问修改Django DB时CSRF验证失败问题咨询

核心疑问解答

你的问题和DEBUG = True配置没有直接关联,关闭Debug模式上线后也不会自动解决未登录用户的CSRF校验失败问题。

Django的CSRF校验默认对所有POST、PUT、DELETE等会修改服务端数据的请求生效,和Debug开关、用户是否为超级管理员无关。你登录超级管理员后请求正常,是因为登录流程会自动下发合法的CSRF Cookie到浏览器,表单提交时的token和Cookie匹配就能通过校验;未登录状态下请求报错,本质是你的请求没有携带合法的CSRF校验凭证。

常见修复方案

  • 如果是模板渲染的传统表单,在<form>标签内部添加{% csrf_token %}模板标签即可,Django会自动生成隐藏的csrfmiddlewaretoken字段完成校验。
  • 如果是前后端分离的异步请求,需要在请求头中添加X-CSRFToken字段,字段值从浏览器Cookie的csrftoken项中获取即可。
  • 如果该接口是面向所有公开用户开放、无敏感操作,你评估后不需要做CSRF防护,可以给对应的视图函数添加@csrf_exempt装饰器(需从django.views.decorators.csrf导入),该接口就会跳过CSRF校验。
  • 额外确认settings.py的MIDDLEWARE列表中已启用django.middleware.csrf.CsrfViewMiddleware,该中间件是CSRF校验的核心依赖,默认不会被关闭。

DEBUG = True的唯一作用是开启调试模式,返回更详细的错误堆栈信息,不会修改任何业务校验逻辑,就算关闭Debug上线,只要没有按上述方案修复CSRF逻辑,未登录用户提交请求依然会返回403错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:08