Menu
CoddyTech

POST 表单

本课属于 Coddy Django 学习旅程的“表单”单元。第 2 课,共 20 课。

页面 /events/new/ 及其视图已经准备就绪,但页面还没有用于添加活动的表单。修改数据的表单会使用 method="post":浏览器会将字段发送到请求正文中,而不是 URL 中。视图会从 request.POST 中读取这些字段,并通过每个输入项的 name 来索引。

Django 还会保护每个 POST 表单。其他网站可能会隐藏一个向你的网站提交数据的表单,而访客的浏览器会连同 Cookie 一起发送它。这种攻击称为跨站请求伪造,简称 CSRF。因此,如果 POST 请求没有来自你自己页面的秘密令牌,Django 就会拒绝该请求,并返回 403 Forbidden。在表单中加入 {% csrf_token %} 会写入这个令牌。下面是一个新闻订阅表单:

<form method="post">
    {% csrf_token %}
    <label for="email">Email</label>
    <input id="email" name="email" type="email">
    <button type="submit">Subscribe</button>
</form>

<label> 用来标注输入项,其 id 与标签的 for 相匹配;type="date" 会显示日历。

challenge icon

挑战

简单

在 events/templates/events/new_event.html 中,用表单替换 {# Write the form here #}。

  1. 使用 method="post",并将 {% csrf_token %} 放在最前面。否则,Django 会以 403 错误拒绝此表单。
  2. 添加带标签的输入框,分别用于 title、date(使用 type="date")和 place,然后添加一个提交按钮。

添加一个活动,然后点击“所有活动”:它会出现在列表中。

亲手试试

{% extends "events/base.html" %}

{% block title %}Add an event{% endblock %}

{% block content %}
<h1>Add an event</h1>
{# 在这里编写表单 #}
{% endblock %}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

表单中的所有课

自己练习: Django 在线编辑器