見出し画像

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送信される前の表示

スクリーンショット 2021-03-12 180345

フォームを送信すると、その内容がメッセージとして表示されます。

スクリーンショット 2021-03-12 180411


サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪