Django Academy · 课时

CSRF 防护与 POST 流程

安全地处理 GET/POST 提交循环

第 4 / 4 课13 个步骤

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 定义 forms.Form
  2. is_valid 与 cleaned_data
  3. 在模板中渲染表单
  4. CSRF 防护与 POST 流程
← 返回 Django Academy