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”>