flask テンプレート
はじめに
Flask便利機能の一つであるテンプレートについて解説する。
テンプレート
準備
下記のファイルを作成する。
- render.py
from flask import Flask, render_template, request app = Flask(__name__) @app.route('/login/') def login(): return render_template('login.html', msg='hello') @app.route('/login_do', methods=['POST']) def login_do(): app.logger.info('%s request', request.form) if request.method == 'POST': return render_template('post.html' , msg1=request.form['msg1'] , msg2=request.form['msg2']) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=80)
- login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Login</title> </head> <body> <form action="/login_do" accept-charset="UTF-8" method="post"> <input type="text" name="msg1"></input> <input type="text" name="msg2"></input> <input type="submit" name="submit"></input> </form> </body> </html>
- post.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Welcome to post show page</title> </head> <body> <p>template Login</p> <p>{{ msg1 }}</p> <p>{{ msg2 }}</p> </body> </html>
ファイルの構成は下記にして実行する。
. ├── render.py └── templates ├── login.html └── post.html
python render.py
これで、render_templateメソッドがtemplates配下のHTML元にレンダリングしてくれる。
※Jinja2テンプレートエンジンのおかげ
アクセス結果
http:// IPアドレス /login
上記にアクセスすると、テキストボックスx2と送信ボタンが表示される。
・画面表示
試しに送信ボタンを押してみた結果が以下
・送信結果
pythonソースで、methods=['POST']を指定してPOSTを受け入れるようにしている。
@app.route('/login_do', methods=['POST'])
そのうえで、指定したURLに対してFORMを記載することでをmsgを表示する処理を実現している。
<form action="/login_do" accept-charset="UTF-8" method="post"> <input type="text" name="msg1"></input> <input type="text" name="msg2"></input> <input type="submit" name="submit"></input> </form>
なお、loggerでデータを表示させてみたら、こんな感じで入ってることがわかった。
INFO in render: ImmutableMultiDict([('msg1', 'a'), ('msg2', 'a'), ('submit', '送信')]) request
まとめ
お手軽にWeb機能が実装できたのでFlaskの凄さを体感できると思う。
POST以外にもGETとかもよく使うと思うので、メソッドもう少しやりたい。