【Django】formの値を取得する方法をたったの1行で解説

get value from formDjango

(最終更新月:2021年12月)

✔︎当記事はDjangoについて、下記の悩みを解決します

「Djangoのフォームで値を取得する方法を知りたい!」

「GETメソッド、POSTメソッドどちらでもできるの?」

「実装時に注意しておくことがあればまとめて知っておきたい」

✔︎当記事を通じて、下記をお伝えします

  • Django formで値を受け取る方法はたったの1行で解決!
  • GET、POSTメソッドでの違いは?
  • 実装の際に注意する点 3点

【著者プロフィール】

profile_icon
【Python歴】11年 x 【Django歴】10年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです。

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです。

「nippo-form.html」というファイルでこんなページを作りました

HTMLファイルのコードは下記の通りです

{% extends "base.html" %}
{% block title %}日報の作成{% endblock %}

{% block content %}
    <form method="GET">
        <input type="text" name="title"/>
        <input type="text" name="content"/>
        <button type="submit">送信</button>
    </form>

{% endblock %}

GETメソッドで値を送信するような記述になっています。

こちらを元に次章より解説していきます。

✔YouTube解説動画

当記事の内容は動画を見ながら進めると、約15分程度で完了します。

動画ならではの情報も解説しているので、記事と一緒にご覧ください。

動画の概要欄には、単元ごとのコードを紹介しているgithubページも載せています。

Django formで値を受け取る方法をたったの1行で解説

learning programming

GETメソッドのフォームでは、

request.GET[フィールド名]

で値を受け取ることができます

「title」「content」のフォームから値を受け取るには下記の通りとします

title = request.GET["title"]
content = request.GET["content"]

POSTメソッドではいかがでしょうか?

POSTメソッドで値を受け取る

POSTメソッドの場合は、

request.POST[フィールド名]

で値を受け取ることができます

reuestのGETメソッドをPOSTメソッドに変更すれば値の受け取りは完了です

ただ本当にこれだけで良いでしょうか?

実は3点気をつけることがありますので最後にまとめます

実装の際に注意すべき3点を解説

①request.GETのキーに注意すること

request.GETはページへアクセスした時GETメソッドでフォームを送信した際に値を受け渡します

送信前に「request.GET[フィールド名]」とすると、送信前なのでキーが存在せずエラーになってしまいますので、if文でキーが存在するかどうかをチェックする必要があります

②request.POSTでは{% csrf_token %}をテンプレート上に記述すること

POSTメソッドではセキュリティの関係で、csrf_tokenを同時送信する必要があります

テンプレートのフォーム内にcsrf_tokenの記述を忘れないようにしましょう

③request.POSTでは、POST送信された場合のみ値を取得すること

request.POSTは送信時のみ値が受け渡されます

if文などでrequest.POSTが発生した場合のみ値を取得するように記述しましょう

まとめ:日報アプリのコードをご紹介

参考までに日報アプリでのコードを紹介します

✔views.py

def nippoCreateView(request):
    template_name="nippo/nippo-form.html"

    if request.POST:
        title = request.POST["title"]
        content = request.POST["content"]

    #受け取った値で必要な処理を行います
        
    return render(request, template_name)

✔nippo-form.html】※一部抜粋

<form method="POST">{% csrf_token %}
    <input name="title" type="text"/>
    <input type="text" name="content"/>
    <button type="submit">送信</button>
</form>

さて、当アプリ開発のシリーズで、それぞれの機能を持ったページを3つほど作ってきました

今後各ページをリンク先として指定したい時も出てくることと思います

通常は、

href=”https://○○/nippo/”

と直接URLを指定しますが、実はDjangoフレームワークでこの方法はオススメしません

次回の記事では、直接URLを指定すべてきでない理由オススメの方法を解説していきます

✔当ブログは以下のような方に向けて書かれています

「Djangoでのアプリ開発を学びたい!」

「Djangoで開発したアプリをWebで公開するにはどうするの?」

✔当ブログ掲載の記事

  • Djangoで作る日報アプリ開発
  • WebアプリをWeb上に公開する方法
  • Webアプリ開発に必要なそのほかの情報
【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

ITCブログにご協力いただける方は、以下もご検討いただけると嬉しいです。

ITCへ投げ銭をする

タイトルとURLをコピーしました