インタラクティブな値のやり取り (4/4)
作成:2017-12-23 09:05
更新:2017-12-23 09:05
更新:2017-12-23 09:05
■送信されたフォームの処理
では、フォームの処理を作成しましょう。今回は、index.htmlの表示も、フォーム送信されたあとの処理も、どちらもindex関数で行います。
では、「hello」内のviews.pyの中に記述したindex関数を下のリスト欄のように修正して下さい。そして、/helloにアクセスして、現れたフォームから送信してみましょう。名前を書いて送ると、「こんにちは、○○さん。」と表示されます。
index関数では、まず送信されたリクエストがGETかPOSTかをチェックしています。
request.methodは、アクセスのメソッドを示すものです。この値が 'POST' ならば、POST送信(すなわち、フォームが送信された状態)であることがわかります。
では、フォーム送信した場合、送られてきた値はどうやって取り出しているのでしょうか。
POST送信されたフォームの値は、request.POSTの中にまとめられています。クエリーパラメータを取り出すときにrequest.GETから値を取り出しましたが、あれとまったく同じ感覚で、POST送信の場合はrequest.POSTから値を取り出すのですね。
後は、取り出した値を処理するだけです。そうそう、テンプレート側では、<input>のvalueにcurrent_nameという値を設定していましたね。ですから、テンプレート側に送る値(context変数にまとめたもの)にこのcurrent_nameを用意しておくのを忘れないようにしましょう。
では、「hello」内のviews.pyの中に記述したindex関数を下のリスト欄のように修正して下さい。そして、/helloにアクセスして、現れたフォームから送信してみましょう。名前を書いて送ると、「こんにちは、○○さん。」と表示されます。
index関数では、まず送信されたリクエストがGETかPOSTかをチェックしています。
if request.method == 'POST':
request.methodは、アクセスのメソッドを示すものです。この値が 'POST' ならば、POST送信(すなわち、フォームが送信された状態)であることがわかります。
では、フォーム送信した場合、送られてきた値はどうやって取り出しているのでしょうか。
name_str = request.POST['name']
POST送信されたフォームの値は、request.POSTの中にまとめられています。クエリーパラメータを取り出すときにrequest.GETから値を取り出しましたが、あれとまったく同じ感覚で、POST送信の場合はrequest.POSTから値を取り出すのですね。
後は、取り出した値を処理するだけです。そうそう、テンプレート側では、<input>のvalueにcurrent_nameという値を設定していましたね。ですから、テンプレート側に送る値(context変数にまとめたもの)にこのcurrent_nameを用意しておくのを忘れないようにしましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
def index(request): if request.method == 'POST': name_str = request.POST['name'] else: name_str = 'noname' context = { 'current_name': name_str, 'msg': 'こんにちは、 ' + name_str + 'さん。', } return render(request, 'hello/index.html', context)
※関連コンテンツ