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"はカレンダーを表示します。
チャレンジ
簡単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 %}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
フォームのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド