Flaskのflashの使い方|リダイレクト時にフラッシュメッセージを出力する方法を解説

スポンサーリンク

この記事では、Flask の flash() メソッドを使用してメッセージをフラッシュする方法を学びます。

スポンサーリンク

メッセージをフラッシュする意味とは?

GUI アプリケーションでは、ユーザーの操作に対してフィードバックを与えることは常に良いことです。

例えば、Flask のフォームで、ユーザがフィールドを空にした場合、そのフィールドが必須であることを伝えるエラー/情報メッセージを与えることは評価されます。

PythonのGUIフレームワークであるTkinterではメッセージやダイアログボックスを使ってメッセージを表示し、クライアントサイドスクリプト言語であるJavaScriptではalert関数を使ってメッセージを表示することができます

そしてFlaskでは、まさにそれを実現するために、このflashメソッドが用意されています。

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 の flash() メソッドを使ったハンズオン

ここでは、ユーザーが正しいパスワードを入力するとログイン成功のフラッシュを表示するシンプルなFlaskアプリケーションを作成します。

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をコーディングしてみましょう。

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 “を押してください。

Form
Form

1234を入力し、送信をクリックします。

Login
Login

これで、私たちのFlashメッセージが画面に表示されました。

まとめ

このチュートリアルはこれで終わりです。

あなたのWebアプリケーションでFlashメソッドを使用するのに十分な知識を得ることができたと思います。

フォームについてもっと知りたい方は Flask Forms の記事をチェックしてみてください。

それではまた次の記事でお会いしましょう! ハッピーコーディング!

タイトルとURLをコピーしました