Flask Flash閃現

 

Flash介紹以及工做方式

- 介紹:flask

flash :閃現
一個好的應用和用戶界面都須要良好的反饋。
若是用戶得不到足夠的反饋,那麼應用 最終會被用戶唾棄。
Flask 的閃現系統提供了一個良好的反饋方式。

 

- 工做方式:瀏覽器

基本工做方式是:

在且只在下一個請求中訪問上一個請求結束時記錄的消息。

注意: 瀏覽器會限制 cookie 的大小,有時候網絡服務器也會。
這樣若是消息比會話 cookie 大的話,那麼會致使消息閃現靜默失敗

 

flash中添加消息

- flash()服務器

  - 該函數是將須要消息存入flash等待下次請求進來時的獲取cookie

  - 在後臺視圖中想要使用 flash須要導入:網絡

from Flask import flash

 

  - flash() 中的兩個參數:session

    - message:app

      - 添加到flash中的數據函數

    - category:spa

      - 消息的類別,默認爲 messagecode

    

  - flash 源碼:

def flash(message, category='message'):
    # 獲取session中的 "_flashes" 的列表,若沒有賦值爲空列表
    flashes = session.get('_flashes', [])
    # 將須要添加的message 與category組成元組放入列表flashes
    flashes.append((category, message))
    # 將flashes列表添加到session中
    session['_flashes'] = flashes
    # 當響應時,將該session添加到用戶瀏覽器
    message_flashed.send(current_app._get_current_object(),
                         message=message, category=category)

 

 

取出flash中的消息

 - get_flashed_messages()

  - 獲取存在flash中的消息,而且刪除flash中的這個消息;

  - 在後臺視圖中想要使用 flash須要導入

from flask import get_flashed_messages

  - 母板中直接調用便可;

{% with messages = get_flashed_messages() %}
    {{ messages }}
{% endwith %}

 

- 被取到後,flash中的數據將被 pop掉

- 源碼:

def get_flashed_messages(with_categories=False, category_filter=[]):
    # 第一次請求進來時,去獲取flashes列表,可是由於沒有加入因此爲空列表
    flashes = _request_ctx_stack.top.flashes
    if flashes is None:
        _request_ctx_stack.top.flashes = flashes = session.pop('_flashes') \
            if '_flashes' in session else []
    if category_filter:
        flashes = list(filter(lambda f: f[0] in category_filter, flashes))
    if not with_categories:
        return [x[1] for x in flashes]
    return flashes
相關文章
相關標籤/搜索