iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0

在Web的應用中,我們常常需要在請求間傳遞一些提示訊息,例如登錄成功、文件上傳成功等提示的訊息。在Flask框架提供了flash功能用於此類暫存消息。所以今天會介紹Flask的flash功能。

什麼是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訊息就可以自動顯示不同樣式了。

Flash存儲位置

默認情況下Flask將flash訊息存在session中,但也可以自定義存儲方式:

app.session_interface = RedisSessionInterface()

這樣flash就會存在Redis中了。

總結

Flask flash提供了非常方便的應用內消息提示功能。適度使用flash訊息可以讓你的應用更易用和具備良好的用戶體驗。


上一篇
[Day 11] session是什麼? 如何在Flask使用session
下一篇
[Day 13] Flask SQLAlchemy (1) 如何建立資料庫
系列文
從開始到放棄的Flask30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言