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

get value from formDjango

(最終更新月: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メソッドで値を送信するような記述になっています

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

【著者プロフィール】

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

当ブログを通じて、下記アプリの作り方、コード等を公開、解説しています

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

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

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

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

初期費用ゼロ/月9,800円でWebデザインが学べる

デザインを習得するためには、客観的なフィードバックと改善が不可欠です。

以下の記事ではこんなWebデザインスクールをご紹介しています。

  • 初期費用ゼロで、月々9,800円のみ
  • オンラインで、教材が使い放題
  • コンテストや実務案件にチャレンジして報酬もGETできる

デザナルはトップデザイナーからレビューがもらえる、格安の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を指定すべてきでない理由オススメの方法を解説していきます

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

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

という方は必見です!

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