English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
GUIに基づく良いアプリケーションは、ユーザーにインタラクティブなフィードバック情報を提供する必要があります。 例えば、デスクトップアプリケーションではダイアログボックスやメッセージボックスを使用し、JavaScriptではalert()関数を使用します。
Flask Webアプリケーションでこのような情報メッセージを作成することは簡単です。 Flaskフレームワークの一時表示システムは、一つのビューでメッセージを作成し、名前がnextのビュー関数で表示できるようにします。
Flaskモジュールにはflash()メソッドが含まれており、メッセージを次のリクエスト(通常はテンプレート)に渡します。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 flash(message, category)
ここでは -
message - パラメータは更新する実際のメッセージです。 category - パラメータはオプションです。 これには「エラー」、「情報」または「警告」があります。
メッセージをセッションから削除するには、テンプレート呼び出しでget_flashed_messages()関数を使用します。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 get_flashed_messages(with_categories, category_filter)
両方のパラメータはオプションです。 受信したメッセージにカテゴリがある場合、最初のパラメータはタプルです。 第二つのパラメータは特定のメッセージのみを表示するのに非常に有用です。
以下の一時表示テンプレートで受信したメッセージがあります。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 {% with messages = get_flashed_messages() %} {% if messages %} {% for message in messages %} {{ message }} {% endfor %} {% endif %} {% endwith %}
今度は、Flaskの一時表示メカニズムを示す簡単な例を見てみましょう。 下記のコードでは、URL => “/”はログインページへのリンクを表示し、送信するメッセージが指定されていません。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 @app.route('/') def index(): return render_template('index.html')
このリンクはユーザーがログインフォームのURLを表示するためのものです => “/login”。 送信時、login()関数がユーザー名とパスワードを検証し、それぞれ「成功」または「エラー」の変数メッセージを一時的に表示します。
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 @app.route('/login, methods=['GET', 'POST']) def login(): error = None if request.method == 'POST': if request.form['username'] != 'admin' or \ request.form['password'] != 'admin': error = 'Invalid username or password. Please try again!' else: flash('You were successfully logged in') return redirect(url_for('index')) return render_template('login.html', error=error)
エラーがある場合、ログインテンプレートが再表示され、エラーメッセージが表示されます。
テンプレートファイル: login.html 以下はコードです -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Flaskサンプル</title> </head> <body> <h1>ログイン</h1> {% if error %} <p><strong>Error:</strong> {{ error }} {% endif %} <form action="}}/login" method="POST"> dl> <dt>ユーザー名:</dt> dd> <input type=text name="username" value="{{request.form.username}}"> </dd> <dt>パスワード:</dt> <dd><input type="password" name="password">/dd> </dl> <p><input type=submit value="ログイン">/p> </form> </body> </html>
ログインが成功した場合、インデックステンプレートに成功メッセージがフラッシュされます。以下のコードはファイル( index.html) -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Flaskメッセージフラッシュ</title> </head> <body> {% with messages = get_flashed_messages() %} {% if messages %} <ul class=flashes> {% for message in messages %} <li>{{ message }}</li>/li> {% endfor %} </ul> {% endif %} {% endwith %} <h1>Flask Message Flashing Example</h1> <p>以下の<a href="{{ url_for('login') }}"> <b>ログイン?</b></a></p> </body> </html>
Flaskメッセージフラッシュサンプルの完全なコードは以下の通りです -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 from flask import Flask, flash, redirect, render_template, request, url_for app = Flask(__name__) app.secret_key = 'random string' @app.route('/') def index(): return render_template('index.html') @app.route('/login, methods=['GET', 'POST']) def login(): error = None print(request.method) if request.method == 'POST': if request.form['username'] != 'admin' or \ request.form['password'] != 'admin': error = 'Invalid username or password. Please try again!' else: #flash('您已成功登录') flash('You were successfully logged in') return redirect(url_for('index')) return render_template('login.html', error=error) if __name__ == "__main__": app.run(debug=True)
上記のコードを実行すると、以下のようになるスクリーンが表示されます。
リンクをクリックすると、ログインページにジャンプします。ユーザー名とパスワードを入力してください -
クリック 登录ボタン。メッセージ「您已成功登录」将显示。