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才会接受到异常对象。
      代码:

4. 异常捕获

(1)主动抛出HTTP异常

csrf只能用在前后端不分离的场景

posted @ 2021-05-23 23:23  芜湖〃  阅读(73)  评论(0)    收藏  举报