在Web的應用中,我們常常需要在請求間傳遞一些提示訊息,例如登錄成功、文件上傳成功等提示的訊息。在Flask框架提供了flash功能用於此類暫存消息。所以今天會介紹Flask的flash功能。
Flash是Flask框架提供的用於儲存提示訊息的機制。顧名思義,這些消息只會「一閃即逝」,通常用於下一個請求結束後就會刪除的訊息。
與session不同,flash訊息不會長期儲存,用完即丟,所以這很適合用來顯示操作結果訊息。
使用flash非常簡單:
from flask import Flask, flash
app = Flask(__name__)
app.secret_key = 'some secret'
@app.route('/login')
def login():
flash('Login success')
return redirect(url_for('index'))
調用flash()函數可以設置一條訊息,默認情況下訊息被標記為message
類別。
在模板中可以通過get_flashed_messages()
來訪問並顯示flash訊息:
{% for message in get_flashed_messages() %}
{{ message }}
{% endfor %}
這樣就可以顯示login路由中設置的flash消息。
flash()支持類別化flash訊息:
flash('Invalid password', 'error')
flash('File not found', 'warning')
flash('Success', 'success')
{% for message in get_flashed_messages(category_filter=["error"]) %}
{% endfor %}
這樣就可以只顯示error類的消息。
categirize_by_url()
模板函數可以根據請求路由,自動過濾顯示類別訊息:
{% for category, message in get_flashed_messages(with_categories=true) | categorize_by_url() %}
<p class="{{ category }}">{{ message }}</p>
{% endfor %}
這樣每個路由的flash訊息就可以自動顯示不同樣式了。
默認情況下Flask將flash訊息存在session中,但也可以自定義存儲方式:
app.session_interface = RedisSessionInterface()
這樣flash就會存在Redis中了。
Flask flash提供了非常方便的應用內消息提示功能。適度使用flash訊息可以讓你的應用更易用和具備良好的用戶體驗。