应用钩子函数
通过装饰器为一个模块添加请求钩子, 对当前模块的请求进行额外的处理. 比如权限验证。
应用钩子函数执行顺序如下:
- before_first_request: 在对应用程序实例的第一个请求之前注册要运行的函数,只会执行一次。
- before_request:在每个请求之前注册一个要运行的函数,每一次请求都会执行。用于打开数据库连接或获取当前登录的用户。
- after_request: 在每个请求之后注册一个要运行的函数, 每次请求都会执行。 需要接收一个 Response类的对象作为参数,并返回一个新的Response对象,或者 直接返回接收到的Response对象。用于打开数据库连接或获取当前登录的用户。
- teardown_request: 注册一个函数在每个请求的末尾运行,不管是否有异常,每次请求的最后都会执行。
钩子函数扮演了工人的角色,将被装饰器装饰的函数存储到指定的容器( 字典或者列表 ),程序在处理请求的过程中会直接对容器进行操作,而不会对钩子函数进行调用。
Blueprint钩子函数
相比应用钩子函数,是在此基础上增加了三个钩子函数: blue.before_request、blue.after_request、blue.teardown_request。
Blueprint 钩子函数同应用钩子函数一样,其内部应该也是对某一个容器进行更改。
Blueprint钩子执行顺序如下:
这个顺序可以理解为请求分应用部分和蓝图部分。当请求需要进入蓝图时,先要通过应用部分的认证,才能访问蓝图部分, 访问完蓝图之后, 要先从蓝图出来, 再经过应用返回响应。如果出错,先检查应用是否有错, 如果应用出错,则返回,否则返回蓝图的错误。
网友评论