Flask Web开发入门、进阶与实战
上QQ阅读APP看书,第一时间看更新

3.3 Flash闪现提示

在Flask框架中,方法flash()的功能是实现消息闪现提示效果。Flask官方对闪现的解释是对用户请求做出无刷新反馈的响应,这类似于Ajax无刷新效果。在本节的内容中,将详细讲解在Flask Web程序中实现闪现提示的方法。

3.3.1 Flash基础

在本章上一个实例中,当用户通过表单发送完请求后,有时需要通过提示让用户知道状态发生了变化,例如提示在表单中输入的用户名或密码格式不合法等。在现实中的一个典型例子是,如果用户提交了错误的登录信息,服务器会返回含有错误提示的响应,并在表单上面显示一个提示消息,提示用户的用户名或密码错误。

为了提高程序的美观性和用户体验,Flask提供了函数flash()实现闪现提示效果,会在发送给客户端的下一个响应中显示一个消息。例如在下面的实例中,演示了在Flask Web程序中使用flash()函数实现闪现提示效果的过程。

源码路径:daima\3\3-3\jianyi.py

编写程序文件jianyi.py,首先引入flash和get_flashed_message方法,然后定义两个方法,一个用于记录flash,一个用于显示flash。文件jianyi.py的主要实现代码如下所示。

运行程序,在浏览器中输入“http://127.0.0.1:5000/add”后会显示设置的返回信息“添加了一个闪现”,如图3-5所示。此时已经记录了一个值为“这是一个无刷新闪现”的flash,然后在浏览器中输入“http://127.0.0.1:5000/get”后会获取并显示这个flash,如图3-6所示。

图3-5 设置的闪现信息

图3-6 显示获取的flash

由此可见,现在已经获取到了值为“这是一个无刷新闪现”的flash。这个flash只存在于两次相邻的请求中,也就是说如果再次刷新一个/get重新发起一个请求时,不会再获取到这个值为“这是一个无刷新闪现”的flash了。例如接下来刷新页面http://127.0.0.1:5000/get,会发现得到一个一片空白的执行效果,如图3-7所示。

图3-7 一片空白的执行效果

注意:在Flask框架中,flash()只是一个记录消息的方法,在某一个请求中记录消息,在下一个请求中获取消息,然后做相应的处理。也就是说flash只存在于两个相邻的请求中“闪现”,这说明只调用flash()函数并不能显示提示信息,还需要借助于模板来渲染这些消息。

3.3.2 使用模板渲染flash()函数的闪现提示信息

在下面的实例中,演示了在Flask Web程序中使用模板文件渲染flash()函数的闪现提示信息的过程。

源码路径:daima\3\3-3\biaodan03.py

1)首先编写程序文件biaodan03.py创建一个简单的Web表单,在视图函数index()中通过函数调用模板实现闪现提示功能。文件biaodan03.py的主要实现代码如下所示。

在上述代码中,每当在表单中提交用户名后,都会比较提交的用户名和存储在Session用户会话中的名字。如果两者相同则不会显示任何提示信息,如果不同则会调用函数flash(),在发送给客户端的下一个响应中显示提示消息“你刚刚修改了用户名!”。

2)因为只调用flash()函数并不会显示提示信息,还需要借助模板来渲染这些消息。建议在基模板中渲染flash消息,因为这样所有页面都能使用这些消息。在下面的模板文件templates/base.html中,使用函数get_flashed_messages()在模板中渲染获取的提示消息“你刚刚修改了用户名!”,主要实现代码如下所示。

执行后的初始效果如图3-8所示,此时在表单上方显示的用户名是“aaa”。如果再次在表单中输入“aaa”并提交,不会显示设置的闪现提示信息。但是如果再次在表单中输入不是“aaa”的用户名并提交,就会显示设置的闪现提示信息“你刚刚修改了用户名!”。例如输入用户名“bbb”并提交后的效果如图3-9所示。

图3-8 执行效果

图3-9 显示闪现提示信息