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

※本サイトにはプロモーション・広告が含まれています。

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

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

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

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

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

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

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

「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ページも載せています。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

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を指定すべてきでない理由オススメの方法を解説していきます

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