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
05-11 20:55