【Django】views.py:フォームから送信されたデータの送信元フォームを判別する

時計 2022.03.06 / 時計

【Django】views.py:フォームから送信されたデータの送信元フォームを判別する

本記事ではDjangoviews.pyで、フォームから送信されたデータの送信元フォームを判別する方法について解説していきます。

フォームはほとんどのWebアプリケーションで利用されます。

Webアプリケーションの1ページに複数のフォームを使用している場合、views.py側で送信されたデータの送信元フォームを判別する必要があります。

本記事を通して、views.py側で送信元フォームを判別する方法を学んでください。

フォームについて

ユーザーアカウントの登録やアンケートの回答などで以下のような入力画面に情報を入力したことがあると思います。

Webサイトのフォーム画面

このようなユーザーが情報を入力し、サーバーへ送信するための場所をフォームと呼びます。

サーバー側ではフォームから送信された情報をデータベースに登録など行います。

このフォームがWebページに複数存在した場合、サーバー側で実行する処理はフォーム毎に異なるのが普通です。そのため送信されたデータがどのフォームから送信されたかを判別する必要があります。

本記事ではこの部分について(どのように判別するのか)解説していきます。

Django:フォームの実装(テンプレート)

フォームはテンプレートから生成されたWebページに表示されます。Webページ上に2つのフォームがある場合のサンプルコードを以下に記します。

<form action="" name="form_survey" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" name="survey_submit">Submit</button>
</form>
<form action="" name="form_question" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" name="question_submit">Submit</button>
</form>

上記サンプルコードではアンケート(survey)と質問(question)の2つのフォームが存在します。

このサンプルコードを利用して、views.pyでどのフォームから送信されたか判別する方法を解説していきます。

Djangoでフォームを作成する方法について詳しくは以下記事をご参照ください。

views.py:どのフォームから送信されたか判別する方法

ユーザーがフォームで送信した情報はviews.pyで操作します。

フォームで送信された情報はrequestオブジェクトとして受け取り、関数内でrequest.POSTまたはrequest.GETを使って送信データを取得できます。

サンプルコードではPOSTでフォーム送信されているため、ここではrequest.POSTを使います。

このrequest.POSTとbutton要素のname属性を使うことで、送信元のフォームを判別することができます。

実はrequest.POSTには送信元フォーム内のbutton要素のname属性が含まれています。

この性質を使って以下のようにコードを記述することで、送信元のフォームを判別して処理を分けることができます。

if request.method == "POST"
    if "survery_submit" in request.POST:
        # 送信元フォームのbutton要素のname属性がsurvery_submitである

    if "question_submit" in request.POST:
        # 送信元フォームのbutton要素のname属性がquestion_submitである

このようにbutton要素のname属性を使うことで、どのフォームから送信されたのかを判別することができます。

まとめ

本記事「【Django】views.py:フォームから送信されたデータの送信元フォームを判別する」はいかがでしたか。

Webアプリケーションでフォームを利用する際に必要となってくる知識です。ぜひ利用していただき、より良いWebアプリケーションを作成してください。