在 Web 应用中,有时需要在响应请求前或者响应请求后做一些处理,为了让每个视图函数避免编写重复功能的代码,Flask 提供了请求钩子,它们可以用来注册在请求处理的不同阶段执行的处理函数,我们就可以轻易的对请求进行预处理和后处理。
Flask 常用请求钩子如下:
-
before_first_request
:在处理第一个请求之前运行 -
before_request
:在每次请求之前运行,如果没有未处理的异常抛出,会在每个请求结束后运行 -
after_request
:如果没有未处理的异常抛出,在每次请求结束后运行 -
teardown_request
:即使有未处理的异常抛出,也会在每个请求结束后运行
这些请求钩子是使用装饰器方式实现,用法也非常简单,使用起来和app.route()
装饰器基本相同。下面使用这些请求钩子装饰一些函数,用于在每次请求前后做一些处理,为了方便理解,只是单纯打印一句话。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
@app .before_first_request def before_first_request(): print ( 'before_first_request' ) @app .before_request def before_request(): print ( 'before_request' ) @app .after_request def after_request(response): print ( 'after_request' ) return response @app .teardown_request def teardown_request(e): print ( 'teardown_request' ) @app .route( '/test' ) def test(): return 'test' |
第一次请求控制台输出:
第二次请求控制台输出:
下面是请求钩子的一些常见应用场景:
-
before_first_request
:第一个请求之前运行,可以进行一些 Web 程序的初始化操作 -
before_request
:每次请求之前运行,可以进行数据库连接的创建操作、用户的权限校验操作等 -
after_request
:我们经常在视图函数中进行数据库操作,比如更新、插入,之后需要将更改提交到数据库中,提交更改的代码就可以放到after_request
钩子注册的函数中 -
teardown_request
:可以接收视图函数的异常,一般用来记录错误日志
注意: 每个请求钩子可以注册任意多个处理函数,函数名也并不是必须和钩子名称相同。如果有多个 before_request,执行顺序从上往下;after_request 接收一个响应对象,并且返回同一个或者更新后的响应对象,多个 after_request 执行顺序是从下往上。
到此这篇关于Flask 请求钩子的实现的文章就介绍到这了,更多相关Flask 请求钩子内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://juejin.cn/post/7030956915853099016