1. 程式人生 > 實用技巧 >flask模板應用-訊息閃現 flash()

flask模板應用-訊息閃現 flash()

訊息閃現

flask提供了一個非常有用的flash()函式,它可以用來“閃現”需要提示給使用者的訊息,比如當用戶登入成功後顯示“歡迎回來!”。在檢視函式呼叫flash()函式,傳入訊息內容,flash()函式把訊息儲存在session中,我們需要在模板中使用全域性函式get_flashed_messages()獲取訊息並將它顯示出來。

通過flash()函式傳送的訊息會儲存在session物件中,所以我們需要為程式設定祕鑰。可以通過app.secret_key屬性或配置變數SECRET_KEY設定。

你可以在任意檢視函式中呼叫flash()函式傳送訊息。例如:

just_flash檢視中,通過flash()函式傳送一條訊息,然後重定向到index檢視。

@app.route('/flash')
def just_flash():
    flash('I am flash, who is looking for me?')
    return redirect(url_for('watchlist'))

flask提供了get_flashed_message()函式用來在模板裡獲取訊息,因為程式的每一個頁面都有可能需要顯示訊息,我們把獲取並顯示訊息的程式碼放到基模板中content塊的上面,這樣就可以在頁面主體內容上面顯示訊息

在base.html模板中加入處理閃現訊息的函式:

因為同一個頁面可能包含多條要顯示的訊息,所以這裡使用for迴圈遍歷get_flashed_message()返回的訊息列表。

<main>
     {% for message in get_flashed_messages() %}
         <div class="alert">{{ message }}</div>
     {% endfor %}
     {% block content %}{% endblock %}
</main>


也可以的定義一些CSS規則,放在static/syles.CSS檔案中

訪問127.0.0.1:5000/開啟程式的主頁,單擊頁面上的Flash something連結(指向/flash),頁面過載後就會顯示一條訊息,如圖:

當get_flashed_message()函式被呼叫時,session中儲存的所有訊息都會被移除。如果這時重新整理頁面,會發現過載後的頁面不再出現這條訊息。

jinja2內部使用unicode編碼型別,所以需要向模板傳遞unicode物件或只包含ASCII字元的字串。在python2中,如果字串包含中文,需要在字串前加u字首,告訴python把該字串編碼成unicode格式,另外還需要在python檔案的首行新增編碼宣告,這會讓python使用utf-8來解碼字串。

在html檔案中的head標籤中新增編碼宣告:<meta charset=”utf-8”>