Djangoでフォーム送信するやり方を記載します。
フォーム送信 GET
まずはGETでのフォーム送信のやり方を書いていきます。
まずは、フォーム送信をする画面のhtmlを下記のように書き、
urls.pyについても変更を加えます。
testapp/index.html
<!DOCTYPE html>
<html>
<head>
<title>タイトル</title>
</head>
<body>
<form action="{% url 'testapp:result' %}" method="get">
{% csrf_token %}
<input type="text" name="num" value="">
<label>入力</label><br>
<input type="submit" value="送信">
</form>
</body>
</html>
アプリケーション(testapp)のurls.py
from django.urls import path
from . import views
app_name = 'testapp'
urlpatterns = [
path('', views.index, name='index'),
path('result', views.result, name='result')
]
<form action=”{% url ‘testapp:result’ %}” method=”get”>の、
{% url ‘testapp:result’ %}はDjango特有の書き方です。
testappはurls.pyのapp_name, resultはpath()のnameの値を示しています。
{% csrf_token %}はフォーム送信するときの必ず書くおまじないだと思ってください。
結果用のテンプレート、result.htmlは下記の通りです。
testapp/result.html
結果 {{num}}
上記のテンプレートで、フォーム送信されたデータを確認します。
views.py
from django.http import HttpResponse
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
def result(request):
# フォーム送信された値を受け取る
result_num = request.GET.get('num')
return render(request, 'result.html', {'num': result_num})
views.pyでは、indexメソッドがフォーム送信をする画面に飛ぶメソッドで、
resultメソッドが、index.htmlのからフォーム送信されたデータを受け取って処理しています。
フォーム送信されたデータは、request.GET.get(name属性の値)で取得できます。
実行結果
index.html

送信後

フォーム送信していることが確認できました。
フォーム送信 POST
次はPOSTでのフォーム送信のやり方を書いていきます。
といっても変更する箇所はほとんどありません。
index.html
<!DOCTYPE html>
<html>
<head>
<title>タイトル</title>
</head>
<body>
<form action="{% url 'testapp:result' %}" method="post">
{% csrf_token %}
<input type="text" name="num" value="">
<label>入力</label><br>
<input type="submit" value="送信">
</form>
</body>
</html>
method=”post”に変更しました。
views.py
from django.http import HttpResponse
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
def result(request):
# フォーム送信された値を受け取る
result_num = request.POST.get('num')
return render(request, 'result.html', {'num': result_num})
request.POST.get(‘num’)に変更しました。
これで、GETのフォーム送信からPOSTのフォーム送信になっています。
