🍖Flask之session、闪现(message)
一.session
1.介绍
-
除请求对象之外,还有一个 session 对象。它允许你在不同请求间存储特定用户的信息
-
它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥 (
app.session_interface
对象)
2.cookie, session, token 区别
- cookie: 存放在客户端的键值对
- session:存放在服务端的键值对
- token: 存放在客户端,通过算法来校验(Django中使用的是jwt认证实现)
3.session 操作
- 注意 : 在使用session之前必须设置一个秘钥
app.secret_key = "the_secret_key" # 秘钥值随便
- session 实现的源码位置
app.session_interface # 后面源码详细讲解..
- 示例
from flask import Flask, request, jsonify, make_response, session
app = Flask(__name__)
app.debug = True
# 设置秘钥
app.secret_key = 'the_secret_key'
@app.route('/', methods=['GET', 'POST'])
def index():
# 设置session
session['name'] = 'shawn'
return '<h1>Hello Word!</h1>'
@app.route('/check', methods=['GET', 'POST'])
def order():
name = session.get('name', None)
if name:
return '<h1>session["name"]=%s</h1>' % name
return '<h1>session中没有找到name</h1>'
@app.route('/delete', methods=['GET', 'POST'])
def delete():
# 删除session
session.pop('name')
return '<h1>name被删除</h1>'
if __name__ == '__main__':
print(app.config)
app.run()
- 演示
二.闪现 (message)
1.介绍
- 作用 : 当页面a出错时, 会跳转到页面b, 并将页面a的错误信息显示出来
- 设值 :
flash('value')
- 取值 :
get_flashed_message()
,默认取所有闪现信息 - 注意 : 闪现是基于session的,所以也必须设置
app.secret_key
秘钥
2.原理
比如有两个函数 error 和 index ,在 index 页面发起请求时,index 生成一个错误,放到session中,跳转到 error 页面显示错误,然后再把 session 移除,并且这个错误只能取一次(也就是让你看一次就会被删除)
3.特点示例
# 设置多个闪现值
flash('超时错误1')
flash('超时错误2',category="x2")
flash('超时错误3',category="x3")
# 使用get_flashed_message()默认一次性全部取完
data = get_flashed_message()
print(data)
"""
超时错误1
超时错误2
超时错误3
"""
# 如果按闪现分类来取,可以实现在不同地方取出不同的闪现值
flash('超时错误1',category="x1")
flash('超时错误2',category="x2")
flash('超时错误3',category="x3")
# 按分类取闪现值
data = get_flashed_messages(category_filter=['x1'])
print(data) # 超时错误1
data = get_flashed_messages(category_filter=['x2','x3'])
print(data0) # ['超时错误2','超时错误3']
4.使用
from flask import Flask,flash,get_flashed_messages,request,redirect
app = Flask(__name__)
app.debug = True
# 闪现基于session,所以也需要设置秘钥
app.secret_key = 'the_secret_key'
@app.route('/index')
def index():
val = request.args.get('value')
if val == 'hello':
return 'Hello World!'
flash('超时错误',category="x1") # category表示对数据进行分类
return redirect('/error')
@app.route('/error')
def error():
"""
展示错误信息
:return:
"""
# 取出该分类的所有数据,并删除该数据,如果有多个分类则是个列表的形式["x1","x2"],
data = get_flashed_messages(category_filter=['x1'])
if data:
msg = data[0]
else:
msg = "..."
return "错误信息:%s" %(msg,)
if __name__ == '__main__':
app.run()
- 演示