Menu
CoddyTech

POSTフォーム

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

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

DjangoはすべてのPOSTフォームも保護します。別のウェブサイトが、あなたのサイトにPOSTするフォームを隠し、訪問者のブラウザーに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

チャレンジ

簡単

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プレイグラウンド