讲师中心 微信公众号
AI工具推荐 视频效率加速

Python项目中如何配置Django的CSRF防护以兼容前后端分离?

星伟姑娘_9016

星伟姑娘_9016

发布时间:2026-09-07 07:45:30

|

1029人浏览过

|

来源于php中文网

原创

前后端分离时Django CSRF防护需显式处理:服务端用@ensure_csrf_cookie确保Cookie写入,前端fetch/axios手动传X-CSRFToken头并配置credentials='same-origin',且必须启用SessionMiddleware。

python项目中如何配置django的csrf防护以兼容前后端分离?

前后端分离场景下,Django的CSRF防护默认行为会直接拦截所有AJAX POST/PUT/DELETE请求——除非你显式把csrftoken Cookie值塞进X-CSRFToken请求头,否则403是必然结果。

为什么前后端分离时{% csrf_token %}标签没用

这个模板标签只在服务端渲染HTML时起作用:它往<form>里插入一个<input type="hidden" name="csrfmiddlewaretoken" value="...">。但前后端分离时,前端(React/Vue)通常不走Django模板渲染,而是通过fetch或axios发JSON请求,模板根本没机会执行,{% csrf_token %}压根不会出现在HTML里。

常见错误现象:
– 页面加载后document.cookie里没有csrftoken;
– 用fetch发POST,浏览器开发者工具Network面板看到请求头没X-CSRFToken,响应直接403。

  • 确保视图返回HTML页面时调用了@ensure_csrf_cookie装饰器(比如首页或登录页),强制Django写入csrftoken Cookie
  • 不要依赖render()自动带上下文——前后端分离时,你很可能用的是TemplateView或直接返回空HTML,必须显式触发token生成
  • 检查CSRF_COOKIE_HTTPONLY = False(Django默认就是False,别手动改成True,否则JS读不到)

fetch和axios怎么正确传X-CSRFToken头

jQuery.ajax默认读取csrftoken Cookie并自动加头,但fetch和原生axios不会。你得自己读、自己塞。

立即学习“Python免费学习笔记(深入)”;

python-pro
python-pro

高级 Python 特性、异步编程、性能调优、静态类型、内存管理、Python 内部机制及生态库方面的专家。

下载

容易踩的坑:
– 用document.cookie.match(/csrftoken=([^;]+)/)正则解析,但Cookie里有多个字段时可能匹配错位;
– fetch默认credentials: 'omit',导致Cookie根本不上发,csrftoken读出来是null。

  • 推荐把token存在<meta name="csrf-token" content="{{ csrf_token }}">里,服务端渲染HTML时由Django注入,前端用document.querySelector('meta[name="csrf-token"]').getAttribute('content')安全读取
  • fetch必须设credentials: 'same-origin',否则连Cookie都拿不到
  • axios全局配置:axios.defaults.xsrfHeaderName = 'X-CSRFToken'; axios.defaults.xsrfCookieName = 'csrftoken';(注意不是xsrfTokenName)

CSRF_COOKIE_SAMESITE和HTTPS配置别踩坑

本地开发用HTTP时,CSRF_COOKIE_SAMESITE = 'None'会导致浏览器直接丢掉Cookie——因为SameSite=None强制要求Secure=True,即必须HTTPS。

生产环境若用Nginx反向代理,还要额外配CSRF_TRUSTED_ORIGINS,否则Referer校验失败也会403。

  • 开发环境保持默认CSRF_COOKIE_SAMESITE = 'Lax'即可,别改None
  • 生产环境必须设CSRF_COOKIE_SECURE = True,否则HTTPS下Cookie不发送
  • 如果前端域名是app.example.com,后端Django要加CSRF_TRUSTED_ORIGINS = ['https://app.example.com'],不然Referer检查通不过

最常被忽略的一点:CSRF验证是否生效,和你用不用SessionAuthentication强相关。如果项目用TokenAuthentication且没启用SessionMiddleware,CsrfViewMiddleware压根不干活——它只对带session的请求校验。前后端分离项目若想用CSRF防护,必须保留session机制,不能全靠token。

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2323

2023.08.11

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6070

2024.03.19

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

5426

2024.03.19

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1671

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4184

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1669

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

24197

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2967

2023.08.04

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn