Flask Flash闪现

 

Flash介绍以及工作方式

- 介绍:

flash :闪现
一个好的应用和用户界面都需要良好的反馈。
如果用户得不到足够的反馈,那么应用 最终会被用户唾弃。
Flask 的闪现系统提供了一个良好的反馈方式。

 

- 工作方式:

基本工作方式是:

在且只在下一个请求中访问上一个请求结束时记录的消息。

注意: 浏览器会限制 cookie 的大小,有时候网络服务器也会。
这样如果消息比会话 cookie 大的话,那么会导致消息闪现静默失败

 

flash中添加消息

- flash()

  - 该函数是将需要消息存入flash等待下次请求进来时的获取

  - 在后台视图中想要使用 flash需要导入:

from Flask import flash

 

  - flash() 中的两个参数:

    - message:

      - 添加到flash中的数据

    - category:

      - 消息的类别,默认为 message

    

  - 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

 

posted @ 2018-11-21 13:43  浮生凉年  阅读(667)  评论(0编辑  收藏  举报