画面からデータを受け取ろう

ショッピングサイトでアカウントを作る場合は、画面から氏名や住所などの情報が入力されます。これらを適切に処理できなければWebアプリケーションとして成り立ちません。

ここでは、画面上から入力されたデータをDjangoで扱う方法を学んでいきます。

Webフォームを作ろう

入力項目や、入力されたデータをウェブリクエストとして受け取るには<form>タグを利用します。

ウェブリクエストについては、ビュー関数について説明した時に登場していますが、

templates フォルダーに get_query.html ファイルを作成します。

templates/get_query.html

{% extends "base.html" %}

{% block body %}
    <form action="" method="get">
        <label>名前:<input type="text" size="20" name="your_name"></label>
        <input type="submit" value="送信">
    </form>
    {% if your_name %}
        {{ your_name }}さん、こんにちは。
    {% endif %}
{% endblock %}

ビュー関数で、画面から入力したデータを扱おう

注釈

ビュー関数を作る前に、少しおさらいをしましょう。

Hello World! を表示しよう でビュー関数について以下のように説明しました。

「ビュー関数 とは、簡単にいえばウェブリクエストを引数にとり、 ウェブレスポンスを返す関数です。」

つまり ウェブリクエストとはビュー関数の第一引数 です。

引数名は、慣習でrequestとしています。

画面に入力されたデータは、ウェブリクエストに格納されています。 <form>タグのmethodに応じて、ウェブリクエストで扱う変数も変わります。 よく使う組み合わせは次の通りです。

HTTP Method QueryObject
get request.GET
post request.POST

今回は<form>タグのmethodに 「get」 を指定したので、 request.GET からデータを取得できます。

それでは、実際にウェブリクエストを扱うビュー関数を作ってみましょう。

hello/views.py

def hello_get_query(request):
    d = {
        'your_name': request.GET.get('your_name')
    }
    return render(request, 'get_query.html', d)

作成したビュー関数を呼び出すため、URLディスパッチャを書きましょう。

hello/urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.hello_world, name='hello_world'),
    url(r'^template/$', views.hello_template, name='hello_template'),
    url(r'^if/$', views.hello_if, name='hello_if'),
    url(r'^for/$', views.hello_for, name='hello_for'),
    url(r'^get/$', views.hello_get_query, name='hello_get_query'), # 追加する
]

http://127.0.0.1:8000/hello/get/ を表示してみましょう。

Empty get query

正常に表示されたら、以下のデータを入力して [送信] ボタンを押下してみましょう。

名前:テスト名

ウェブリクエストを正常に処理できると、次のような表示になります。

Get query

HTTP Methodの使い分けについて

今回は、画面から入力されたデータをget methodで受け取りました。

一般的にget methodとpost methodは次のように使い分けます。

HTTP Method 用途
get 検索や表示の切替など、永続化されたデータに影響を与えない処理を行う場合
post 登録・更新など、永続化されたデータに影響を与える処理を行う場合

HTTP Methodにはputやdeleteなども存在しますが、postで代用する事が少なくありません。

注釈

HTTP Method を含め、重要な基礎知識の多くは Webを支える技術 (技術評論社) に詳しい説明が載っています。