Menu
CoddyTech

POSTフォーム

CoddyのDjangoジャーニー「フォーム」セクションの一部。レッスン 2/20。

/events/new/ページとそのビューは準備できていますが、イベントを追加するフォームがありません。データを変更するフォームではmethod="post"を使います。ブラウザーはフィールドをURLではなくリクエストの本文で送信します。ビューは各入力欄のnameをキーとして、request.POSTから値を読み取ります。

Djangoにはもう1つルールがあります。別のウェブサイトがあなたのサイトにデータを送信するフォームを隠しておき、訪問者のブラウザーがCookieと一緒に送信する可能性があります。これはCSRFと呼ばれる攻撃です。そのためDjangoは、あなたのページから発行された秘密のトークンがないPOSTをすべて拒否し、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>は、forが一致するidを持つ入力欄の名前を示します。また、type="date"はカレンダーを表示します。

challenge icon

チャレンジ

簡単

new_event.htmlに、ビューが想定するフォームを書きます。

  • フィールドをPOSTで送信し、CSRFトークンを含めます。
  • ビューが読み取る値ごとに、ラベル付きの入力欄を1つ用意します。日付入力欄にはカレンダーが表示されます。
  • 送信ボタンを用意します。

「Run」を押してイベントを追加し、その後ホームページを開きます。

自分で試してみよう

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

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

{% block content %}
<h1>Add an event</h1>
{# ここにフォームを記述する #}
{% endblock %}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

フォームのすべてのレッスン

自分で練習してみよう: Djangoプレイグラウンド