Flaskでのフォームの送信
今日は、『つくってマスターPython』の6-2 “FlaskでWebアプリケーション”で学んだことをアウトプットします。
フォームの送信
Flaskでフォームの送信を行う場合、ポイントは2つ。
1つは「GETとPOSTのアクセス管理」、もう1つは「送信されたフォームデータの扱い」です。
POST送信での処理は、@app.routeに「methods」という値を用意することで設定できます。このmethodsに’POST”と指定すれば、POST送信を受けられます。また、この値はリストとして指定することもでき、[‘GET’, ‘POST’]とすることでGETとPOSTの両方を受け取ることも可能になります。
@app.route( アドレス , methods=メソッド )
リクエストの情報を扱う機能は、Flaskのrequestオブジェクトとして用意されています。このrequestから必要な値を得ることで、アクセスのメソッドや、送信されたフォームの情報を得ることができます。
メソッドの取得
request.method
request.methodは、リクエストのメソッドを保管しています。GETやPOSTアクセスをすると、この値は’GET’または’POST’になります。
フォームの情報
フォーム送信された値は、request.formにまとめられています。この値は辞書になっており、フォームに用意されるコントロールのname属性を指定して値を取り出すことができます。例えば、request.form[‘name’]とすれば、<input name=”name”>の値が得られます。
フォーム送信を行う
Jija2に対応しフォームを追加したhtmlファイルは以下のようになります。
<!DOCTYPE html>
<html lang=ja dir="ltr">
<head>
<meta charset="utf-8">
<title>{{title}}</title>
</head>
<body>
<h1>{{title}}</h1>
<p>{{msg}}</p>
<div>
<form method="post" action="/">
<input type="text" name="msg">
<input type="submit">
</form>
</div>
</body>
</html>
このテンプレートを読み込み、フォームを送信した際の処理を行うスクリプトファイルは以下のようになります。
from flask import Flask, request, render_template
app = Flask("helloapp")
@app.route("/", methods=['GET', 'POST'])
def hello():
if request.method == 'POST':
msg = request.form['msg']
return render_template('index.html',
title='Hello',
msg='you typed: ' + msg)
else:
return render_template('index.html',
title='Hello',
msg='type message:')
if __name__ == '__main__':
app.debug = True
app.run(host='127.0.0.1')
POST送信される前の表示
フォームを送信すると、その内容がメッセージとして表示されます。
いいなと思ったら応援しよう!
サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪