请求完成后,想要让用户知道状态发生了变化
确认信息,警告,或者错误提醒
例子:
用户提交了一个错误的登录表单之后,服务器发回的响应重新渲染了登录表单,并在表单上显示了一个消息,提示用户用户名或者密码错误
flash()函数
修改上一个hello.py
#主页
@app.route('/')
def index():
name = None
form = NameForm()
if form.validate_on_submit():
old_name = session.get['name']
#每次提交的表单的名字都会和存储在session会话中的名字比较
if old_name is not None and old_name!=form.name.data:
#名字不同显示flash消息
flash('Looks like you have changed your name!')
# 会用新名字存储到用户会话session中
session['name'] = form.name.data
return redirect(url_for('index'))
#渲染,模板会变化
return render_template('index.html',form=form,name=session.get('name'))
用户会话中存储的名字是上一个表单中提交的数据
如果两个名字不一样,就会调用flash()函数,在发给客户端的下一个响应中显示消息
仅调用flash()函数不能显示出消息,还用在模板中渲染这些消息
在基模板中渲染flash消息,这样所有的页面都会使用这些消息
get_flashed_messages()函数
flask将get_flashed_messages()函数开放给模板,用来获取并渲染消息
在上一个版本的base.html中写入
<!-- content中有一个<div>容器,包含了页面头部 -->
{% block content %} <!-- content表示主体内容 -->
<div class="container">
{% for message in get_flashed_messages() %}
<div class="alert alert-warning">
<button type="button" class="colse" data-dismiss="alert">×</button>
{{message}}
</div>
{%endfor%}
{% block page_content%}{%endblock%}
</div>
{% endblock%}
使用alert-warning渲染所有的消息
模板中使用循环,请求循环中每次调用flash()函数都会生成消息,可能有多个消息在排队等待显示
get_flashed_messages()函数获取消息在下次调用时不会再次返回,flash消息只显示一次,然后消失