Flask之flash
一、flash简单用法
好的应用程序和用户界面都与反馈有关。如果用户没有得到足够的反馈,他们可能最终会讨厌该应用程序。Flask提供了一种非常简单的方法,可以通过闪烁系统向用户提供反馈。基本上,闪存系统使得可以在请求结束时记录一条消息,并在下一个(也只有下一个)请求中访问它。通常将其与布局模板结合使用以显示消息。
在使用flash过程中需要注意以下几个方面:
1、使用之前需要设置秘钥
flash是基于session来进行完成,而session中是必须要设置秘钥的,所以flash是必须要设置秘钥的。
2、设置值
设置值是通过flash('1234')这样的形式来设置的,但是假如有不同类型的值可以通过category参数来对设置的值进行分类。
from flask import Flask, flash, redirect app = Flask(__name__)
app.secret_key = 'abcdef' @app.route('/login') def login(): flash('aaa') #设置基本的值 flash('bbb', category='typeb') #分类设置值 return redirect('/index') if __name__ == '__main__': app.run()
3、取值
flash中取值使用的是get_flashed_messages方法,如果需要取出指定分类的数据,输入category_filter参数即可:
from flask import Flask, flash, redirect, get_flashed_messages app = Flask(__name__) app.secret_key = 'abcdef' @app.route('/login') def login(): flash('aaa') # 设置基本的值 flash('bbb', category='typeb') return redirect('/index') @app.route('/index') def index(): print(get_flashed_messages()) # ['aaa', 'bbb'] print(get_flashed_messages(category_filter='typeb')) # ['bbb'] return 'index' if __name__ == '__main__': app.run()
需要注意的是,取值是通过session.pop()这样的方法,一旦第一次取走后,访问index页面,之前的值就不存在了,除非再重新进行login函数赋值操作。
所以,flash就是一个基于session来实现的保存数据集合的一种技术,它的特点就是使用一次数据就会被删除。
二、应用场景
一般的应用场景就是在跳转页面后提示信息,比如,登录成功或者失败之类的提示语。
from flask import Flask, flash, redirect, get_flashed_messages, request, render_template app = Flask(__name__) app.secret_key = 'abcdef' @app.route('/login') # 请求http://127.0.0.1:5000/login?username=zhangsan def login(): username = request.args['username'] print(username) if username == 'zhangsan': flash('登录成功') return redirect('/index') else: flash('登录失败') # 设置基本的值 return render_template('login.html') @app.route('/index') def index(): print(get_flashed_messages()) # ['登录成功'] return 'index' if __name__ == '__main__': app.run()
当然你可以直接将flash的消息渲染在模板文件中,只需要使用get_flashed_messages方法即可。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ get_flashed_messages() }} <!--闪现消息--> </body> </html>
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。