スポンサーリンク

[Django 2] フォーム送信

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