【Python】【Flask】オブジェクトでテスト環境と本番環境の設定を分ける
MAX
MAX999blog
Flaskのflashを使うことで、処理結果やエラー情報等を画面上に簡単に表示させられる。
base.htmlに記載することで、共通でflashメッセージを出力できるようになる。
1# base.html
2<!-- flashの第二引数をtrueに設定 -->
3 {% with messages = get_flashed_messages(with_categories=true) %}
4 {% if messages %}
5 <ul class="flash">
6 {% for category, message in messages %}
7 <!-- メッセージ内にCRLFがある場合は改行して表示する -->
8 <li class="{{ category }}" >{{ message | replace("\r\n", "<br/>") | safe }}</li>
9 {% endfor %}
10 </ul>
11 {% endif %}
12 {% endwith %}
13
with_categoriesにtrueを設定することで、flashに第二引数(カテゴリー)を設定することが可能になる。(デフォルトだとfalse)
カテゴリーを設定することで、エラー時や正常時の区別をすることが可能となる。
また、get_flashed_messages(category_filter=["error"])
等を設定することで、特定のカテゴリーに対してのみ、メッセージの出力処理を行うこともできる。
カテゴリー毎にCSSを設定することで、処理結果(エラーや正常終了)に合わせてメッセージの出力形式を設定できる。
1style.css
2.error {background: #FF9999; }
3.complete {background: #cae6f6; }
1# app.py
2
3from flask import flash, render_template, redirect
4
5def main():
6
7 #何か適当な処理
8
9 #エラー判定
10 if error:
11 #メッセージの設定
12 errorMessage = "正常に終了しませんでした。\r\n" + error
13
14 #フラッシュメッセージの出力
15 flash(errorMessage, "error")
16 return render_template('xxx.html')
17 else:
18 #メッセージの設定
19 infoMessage = "処理が正常終了しました。\r\n"
20
21 #フラッシュメッセージの出力
22 flash(infoMessage, "complete")
23 return render_template('xxx.html')
Python側の処理はシンプル。出力内容のメッセージを設定して、flashにメッセージとカテゴリーを渡す。
メッセージやカテゴリーをlistにした場合、htmlに設定した通り、各メッセージとカテゴリーでメッセージが出力される。
個人的には、カテゴリーを複数設定するよりは、1つのカテゴリーに対して、複数のメッセージを設定した方が、使い勝手が良い気がする。