(最終更新月: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ページも載せています。
Django formで値を受け取る方法をたったの1行で解説
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つほど作ってきました
今後各ページをリンク先として指定したい時も出てくることと思います
通常は、
と直接URLを指定しますが、実はDjangoフレームワークでこの方法はオススメしません
次回の記事では、直接URLを指定すべてきでない理由とオススメの方法を解説していきます