引言 本文将介绍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 bp
addonesApp = bp("addonesApp", '__name__', url_prefix="/addones") # 当前蓝图对象
@addonesApp.before_request
def before_request_A():
print("before_request_A")
@addonesApp.before_request
def before_request_B():
print("before_request_B")
@addonesApp.after_request
def after_request_A1(res):
print("after_request_A1")
return res
@addonesApp.after_request
def after_request_B1(res):
print("after_request_B1")
return res
#@addonesApp.app_errorhandler(404)
#def app_errorhandler():
#print("after_request_B1")
@addonesApp.teardown_request
def 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