一個(gè)基于GUI好的應(yīng)用程序需要向用戶提供交互的反饋信息。 例如,桌面應(yīng)用程序使用對(duì)話框或消息框,JavaScript使用alert()函數(shù)用于類(lèi)似的目的。
在Flask Web應(yīng)用程序中生成這樣的信息消息很容易。 Flask框架的閃現(xiàn)系統(tǒng)使得可以在一個(gè)視圖中創(chuàng)建一個(gè)消息并將其呈現(xiàn)在名為next的視圖函數(shù)中。
Flask模塊包含flash()方法。 它將消息傳遞給下一個(gè)請(qǐng)求,該請(qǐng)求通常是一個(gè)模板。
# Filename : example.py # Copyright : 2020 By Nhooo # Author by : www.soo66.com # Date : 2020-08-08 flash(message, category)
在這里 -
message - 參數(shù)是要刷新的實(shí)際消息。 category - 參數(shù)是可選的。 它可以是’錯(cuò)誤’,’信息’或’警告’。
要從會(huì)話中刪除消息,模板調(diào)用get_flashed_messages()函數(shù)。
# Filename : example.py # Copyright : 2020 By Nhooo # Author by : www.soo66.com # Date : 2020-08-08 get_flashed_messages(with_categories, category_filter)
兩個(gè)參數(shù)都是可選的。 如果收到的消息具有類(lèi)別,則第一個(gè)參數(shù)是元組。 第二個(gè)參數(shù)對(duì)于僅顯示特定消息很有用。
以下閃現(xiàn)模板中收到消息。
# Filename : example.py # Copyright : 2020 By Nhooo # Author by : www.soo66.com # Date : 2020-08-08 {% with messages = get_flashed_messages() %} {% if messages %} {% for message in messages %} {{ message }} {% endfor %} {% endif %} {% endwith %}
現(xiàn)在我們來(lái)看一個(gè)簡(jiǎn)單的實(shí)例,演示Flask中的閃現(xiàn)機(jī)制。 在下面的代碼中,URL => “/”顯示了到登錄頁(yè)面的鏈接,沒(méi)有指定要發(fā)送的消息。
# Filename : example.py # Copyright : 2020 By Nhooo # Author by : www.soo66.com # Date : 2020-08-08 @app.route('/') def index(): return render_template('index.html')
該鏈接引導(dǎo)用戶顯示登錄表單的URL => “/login”。 提交時(shí),login()函數(shù)驗(yàn)證用戶名和密碼,并相應(yīng)地閃現(xiàn)“成功”或“錯(cuò)誤”變量消息。
# Filename : example.py # Copyright : 2020 By Nhooo # Author by : www.soo66.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)
如有錯(cuò)誤,登錄模板將重新顯示并顯示錯(cuò)誤消息。
模板文件: login.html 代碼如下 -
# Filename : example.py # Copyright : 2020 By Nhooo # Author by : www.soo66.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>
如果登錄成功,則在索引模板上閃現(xiàn)成功消息。以下代碼保存在文件( index.html) -
# Filename : example.py # Copyright : 2020 By Nhooo # Author by : www.soo66.com # Date : 2020-08-08 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Flask消息閃現(xiàn)</title> </head> <body> {% with messages = get_flashed_messages() %} {% if messages %} <ul class=flashes> {% for message in messages %} <li>{{ message }}</li> {% endfor %} </ul> {% endif %} {% endwith %} <h1>Flask Message Flashing Example</h1> <p>您想要<a href = "{{ url_for('login') }}"> <b>登錄?</b></a></p> </body> </html>
Flask消息閃現(xiàn)示例的完整代碼如下所示 -
# Filename : example.py # Copyright : 2020 By Nhooo # Author by : www.soo66.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)
執(zhí)行上述代碼后,您將看到如下所示的屏幕。
當(dāng)點(diǎn)擊鏈接時(shí),將會(huì)跳轉(zhuǎn)到登錄頁(yè)面。輸入用戶名和密碼 -
點(diǎn)擊 登錄按鈕。 將顯示一條消息“您已成功登錄”。