CSRF 防护与 POST 流程
安全地处理 GET/POST 提交循环
CSRF 防护与 POST 流程 是 CoddyKit 上的免费 Django Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Django Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Django Academy 课程共包含 4 节课。
CSRF 是什么
CSRF会诱骗已登录用户提交隐藏请求。Django 会拦截此类请求,防止攻击者冒充用户执行操作。🔒
保护已启用
Django 默认启用CsrfViewMiddleware,因此所有未受保护的 POST 请求都会被拒绝,直到您添加正确的令牌。
csrf_token 标签
在每个 POST 表单中添加{% csrf_token %}。它会注入一个包含每个会话专属秘密令牌的隐藏字段。
<form method="post">
{% csrf_token %}
</form>它为何有效
该令牌证明请求来自您自己的页面。其他网站上的伪造表单无法猜出它,因此 POST 请求会失败。
GET 显示表单
GET请求会显示一个空白的未绑定表单,让用户可以开始输入内容。
if request.method == "GET":
form = ContactForm()POST 提交数据
POST会将填写好的值发送回来。您需要先将它们绑定到表单并运行验证,然后再执行其他操作。
if request.method == "POST":
form = ContactForm(request.POST)先验证,再执行操作
如果已绑定表单的is_valid()返回 True,就处理 cleaned_data:保存数据、发送电子邮件,或执行该表单所负责的其他操作。
if form.is_valid():
save(form.cleaned_data)成功后重定向
成功后,重定向到新的 URL。这种“提交/重定向/获取”模式可以避免刷新页面时重复提交数据。
return redirect("thanks")发生错误时重新渲染
如果验证失败,请使用绑定的表单重新渲染同一个模板。表单仍会保留输入内容,并显示每条错误信息。
return render(request, "contact.html",
{"form": form})完整模式
这种“GET 用于显示、POST 用于处理”的结构就是标准表单视图。一个视图即可清晰地处理这两种方法。
form = ContactForm(request.POST or None)
if form.is_valid():
return redirect("thanks")注意 AJAX 请求
JavaScript 发出的 POST 请求必须将令牌放在 X-CSRFToken 标头中,该令牌从 csrftoken Cookie 中读取,否则 Django 会拒绝这些请求。
快速检查
检查您对 CSRF 和 POST 的了解。
回顾
在每个 POST 表单中添加 csrf_token。GET 显示表单,POST 验证表单,然后在成功时重定向,发生错误时重新渲染。✅
用 AI 导师学习 Python — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「CSRF 防护与 POST 流程」课时是免费的吗?
是的 — 「CSRF 防护与 POST 流程」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Django Academy 课程的其余内容,请升级到 CoddyKit PRO。 Django Academy 课程共包含 4 节课。
「CSRF 防护与 POST 流程」这节课中我会学到什么?
安全地处理 GET/POST 提交循环 你通过在浏览器中直接运行的动手代码来练习 Django Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Django Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Django Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「CSRF 防护与 POST 流程」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Django Academy 课中编写并运行代码吗?
能。每节 Django Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 定义 forms.Form
- is_valid 与 cleaned_data
- 在模板中渲染表单
- CSRF 防护与 POST 流程