flask_context
定义全局的钩子函数
有的时候在处理请求之前和之后,执行某些特定的代码是很有用的,这就用到了请求钩子
例如在请求之前创建数据库连接或者redis连接;或者是系统里面用户请求处理之前先验证用户的身份,是否激活,激活执行什么操作,没激活用户一直绑到固定页面去直到激活
为了避免每个试图函数中都使用重复的代码,flask提供了注册通用函数的功能;
也就是说只要写一个请求钩子-函数,整个程序实例全局都被应用了。
例如:在所有请求之前先验证下用户的认证状态
@before_app_request def before_request(): if current_user.is_authenticated: current_user.ping() if not current_user.confirmed and request.endpoint[:5] != 'auth.' and request.endpoint != 'static': return redirect(url_for('auth.unconfirmed'))
常见的4种钩子:
before_first_request:注册一个函数,在处理第一个请求之前运行
before_request:注册一个函数,每次请求之前运行
after_request:注册一个函数,没有未处理的异常抛出,每次请求之后运行
teardown_request:注册一个函数,有未处理的异常抛出,每次请求之后运行
在请求钩子和视图函数之间共享数据一般使用程序上下文g;
例如before_request处理程序可以从数据库中加载已登录用户,将其保存到g.user中,随后调用试图函数,试图函数再从g.user中获取用户