在上一个例子中,如果用户输入名字只后提交表单,然后点击浏览器刷新按钮,会发现一个不要提交空表单的提示,这是因为刷新浏览器会重新发送之前发送过的最后一个请求,所以刷新页面会再次提交一次表单。这样在登录的状态下一旦刷新就会提交错误,所以我们不应该把POST作为最后一个请求。
1 重定向
使用重定向作为POST请求的响应,响应内容是URL,而不是包含HTML代码的字符串,也就是POST/重定向/Get模式。当浏览器收到这种响应的时,会向重定向的URL发起get请求 。但是这种方法带来的问题是当POST请求结束时,保存的name字段也会丢失,所以我们要在两次请求中记住数据。程序可以把数据存在于用户会话中,用户会话是一种私有存储,存在于每个连接到服务器的客服端中,名为session.
使用重定向修改之后的代码为
def index():
form = NameForm()
if form.validate_on_submit():
session['name'] = form.name.data
return redirect(url_for('index'))
return render_template('index.html', form=form, name=session.get('name'))
2 flash
请求完成之后,有时会需要让用户知道状态发生变化,警告或者错误提醒。Flask提供flash函数,并且在模板中提供了get_flashed_message()函数,用来获取并且渲染信息。,