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のフォーム送信になっています。