この記事では、Flask の flash() メソッドを使用してメッセージをフラッシュする方法を学びます。
メッセージをフラッシュする意味とは?
GUI アプリケーションでは、ユーザーの操作に対してフィードバックを与えることは常に良いことです。
例えば、Flask のフォームで、ユーザがフィールドを空にした場合、そのフィールドが必須であることを伝えるエラー/情報メッセージを与えることは評価されます。
PythonのGUIフレームワークであるTkinterではメッセージやダイアログボックスを使ってメッセージを表示し、クライアントサイドスクリプト言語であるJavaScriptではalert関数を使ってメッセージを表示することができます。
そしてFlaskでは、まさにそれを実現するために、このflashメソッドが用意されています。
この記事もチェック:Flaskのエラー処理|エラーメッセージの表示やエラーログを表示させる方法
Flask flashはどのように動作するのですか?
Flask の flash メソッドは、ユーザーに対してメッセージを表示します。
Flash では、ある Flask View で flash メッセージを作成し、それを “next” と呼ばれる別の View (通常は template View) で表示することができます。
Template Viewの典型的な例として、以下のようなものがあります。
@app .route( '/template' )
def blog():
#codes...
#codes...
return render_template( 'template.html' )
|
つまり、あるFlask ViewでFlashメッセージを作成し、それを次のViewに渡す(リクエストと一緒に)ことで、ユーザーにメッセージを表示させることができます。
Flashのシンタックスです。
flash(message,category) |
ここで
- メッセージ。表示するメッセージ
- カテゴリー。An Optional parameter, which can be set to “error”, “info”, or “warning”.
フラッシュメッセージが保存されているセッションからメッセージを取り出し、テンプレートに表示するには、get_flashed_messages()関数を使用します。
get_flashed_messages(with_categories, category_filter) |
ここです。
- with_categories。カテゴリ(error/info/warning)を記述するOptional Parameterのタプル。
- category_filter: カテゴリを指定するオプションのパラメータ。特定のメッセージのみを表示するためのOptional Parameter
Templateファイルのget_flashed_message()の簡単な例です。
{ % with messages = get_flashed_messages() % }
{ % if messages % }
{ % for message in messages % }
{{ message }}
{ % endfor % }
{ % endif % }
{ % endwith % }
|
この記事もチェック:FlaskでJinja2を使ってViewのテンプレートを作る方法。
Flask の flash() メソッドを使ったハンズオン
ここでは、ユーザーが正しいパスワードを入力するとログイン成功のフラッシュを表示するシンプルなFlaskアプリケーションを作成します。
この記事もチェック:FlaskとSQLAlchemyを使ってログイン認証機能を実装する方法
1) Flaskアプリケーションファイルのコーディング
ここでは、パスワードを入力する簡単なフォームを表示します。
パスワードが正しければ、メッセージを表示します。
from flask import Flask,render_template,request,redirect,flash
app = Flask(__name__)
@app .route( '/form' )
def form():
return render_template( 'form.html' )
@app .route( '/login' , methods = [ 'POST' , 'GET' ])
def login():
if request.method = = 'GET' :
return "Login via the login Form"
if request.method = = 'POST' :
password = request.form[ 'password' ]
if password = = '123' :
#The following flash message will be displayed on successful login
flash( 'Login successful' )
return render_template( 'success.html' )
else :
return redirect( '/form' )
app.run(host = 'localhost' , port = 5000 )
|
ここで、success.htmlが「次」のTemplateとなり、そこにメッセージが表示されることになります。
以上です!では、Templateをコーディングしてみましょう。
この記事もチェック:Flaskでフォームを実装|ユーザーの入力を受け取る方法などを解説
2) テンプレートのコード化
form.htmlは、以下のようになります。
< form action = "/login" method = "POST" >
< p >password < input type = "text" name = "password" /></ p >
< p >< input type = "submit" value = "Submit" /></ p >
</ form >
|
そして、Success.htmlのテンプレートファイル。
{ % with messages = get_flashed_messages() % }
{ % if messages % }
{ % for message in messages % }
{{ message }}
{ % endfor % }
{ % endif % }
{ % endwith % }
<h2>User Authenticated< / h2>
|
ここで、get_flashed_messages()を使用していることに注意してください。
3)実装
以上です! では、サーバーを起動して、Webページを確認してみましょう。
/form “を押してください。
1234を入力し、送信をクリックします。
これで、私たちのFlashメッセージが画面に表示されました。
まとめ
このチュートリアルはこれで終わりです。
あなたのWebアプリケーションでFlashメソッドを使用するのに十分な知識を得ることができたと思います。
フォームについてもっと知りたい方は Flask Forms の記事をチェックしてみてください。
それではまた次の記事でお会いしましょう! ハッピーコーディング!