flask 2
1. session
对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息
在服务器端进行状态保持的方案就是 Session
Session依赖于Cookie,session的ID一般默认通过cookie来保存到客户端。
注意:并不意味着cookie没了,session就没有了,session还有其他的保留方案!
flask中的session需要加密,所以使用session之前必须配置SECRET_KEY
选项,否则报错.
session的有效期默认是会话期,会话结束了,session就废弃了。
如果将来希望session的生命周期延长,可以通过修改cookie中的sessionID来完成配置。
2. session操作
(1)引入session
from flask import Flask,session
(2)设置秘钥
app = Flask(__name__)
class Config(object):
# 使用session之前,必须先设置秘钥
SECRET_KEY = "123903tklasdlkas@"
app.config.from_object(Config)
(3)设置、获取、删除session
@app.route('/set_session')
def set_session():
"""设置session数据"""
session["uname"] = "xiaoming"
session["age"] = 13
session["book_list"] = [{"title":"book_name"},{"title":"book_name"}]
return "set_session"
@app.route('/get_session')
def get_session():
"""获取session数据"""
print(session.get("uname"))
print(session.get("age"))
print(session.get("book_list"))
return "get_session"
@app.route('/del_session')
def del_session():
"""删除session数据"""
if session.get("uname"):
del session["uname"]
return "ok"
if __name__ == '__main__':
app.run(host="0.0.0.0",port=5000,debug=True)
3. 请求钩子[hook]
在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:
- 在项目运行开始时,建立数据库连接;
- 在客户端请求开始时,根据需求进行权限校验;
- 在请求结束视图返回数据时,指定数据的交互格式;
为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设置的功能,即请求钩子。
请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子(注意:名字是固定):
- before_first_request
- 在处理第一个请求前执行[项目初始化时的钩子]
- before_request
- 在每一次请求前执行
- 如果在某修饰的函数中返回了一个响应,视图函数将不再被调用
- after_request
- 如果没有抛出错误,在每次请求后执行
- 接受一个参数:视图函数作出的响应
- 在此函数中可以对响应值在返回之前做最后一步修改处理
- 需要将参数中的响应在此参数中进行返回
- teardown_request:
- 在每一次请求后执行
- 接受一个参数:错误信息,如果有相关错误抛出
- 需要设置flask的配置DEBUG=False,teardown_request才会接受到异常对象。
代码: