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