引言 本文将介绍Flask中request的钩子函数分类、执行顺序。代码示例将写在“蓝图视图对象脚本”中。笔者认为:“Flask的request钩子函数类似于API/UI自动化中的‘(yield)前置准备、后置清理’。 注意 Flask的response是没有钩子函数的。 总结request钩子函数的执行顺序:before_request—>after_request—>视图函数—>teardown_request
1.request钩子函数分类
说明 当前蓝图对象为“addonesApp”,如下所示:
from flask import Blueprint as bp
addonesApp=bp(“addonesApp”,‘name‘,urlprefix=“/addones”) # 当前蓝图对象_
| 分类 | 【需要】入参(res)/return(res) |
|---|---|
| before_request | 不需要 |
| after_request | 需要 |
| teardown_request | |
| 【了解】app_errorhandler | NA |
2.代码实现
我们单独定义一个“addones.py”的蓝图对象文件,定义:“2个before_request,2个after_request,1个teardown_request及1个蓝图视图函数”,具体代码如下(省略蓝图对象的注册):
# -*- coding: utf-8 -*-"""====================================@File Name :addones.py@Time : 2022/5/2 14:40@Program IDE :PyCharm@Create by Author : 一一Cooling===================================="""from flask import Blueprint as bpaddonesApp = bp("addonesApp", '__name__', url_prefix="/addones") # 当前蓝图对象@addonesApp.before_requestdef before_request_A():print("before_request_A")@addonesApp.before_requestdef before_request_B():print("before_request_B")@addonesApp.after_requestdef after_request_A1(res):print("after_request_A1")return res@addonesApp.after_requestdef after_request_B1(res):print("after_request_B1")return res#@addonesApp.app_errorhandler(404)#def app_errorhandler():#print("after_request_B1")@addonesApp.teardown_requestdef teardown_request(res):print("teardown_request")return res@addonesApp.get("/index")def index():print("addones-index")return "addones-index"
3.request钩子函数的执行顺序
我们用apifox访问接口“/addones/index”,通过pycharm的打印输出得到执行顺序,如下所示:
| (脚本)定义顺序 | before_request_A->before_request_B->after_request_A1->after_request_B1->teardown_request->(蓝图视图函数)index |
|---|---|
| 执行顺序 | before_request_A before_request_B addones-index after_request_B1 after_request_A1 teardown_request ![]() |
结论
request钩子函数的执行顺序:before_request—>after_request—>视图函数—>teardown_request

