请求钩子
钩子装饰器
Flask中有几个处理request的装饰器,在请求的特定时机会自动触发,若想人为干预请求的处理,可以注册在特定时机触发的函数即可,如:请求的拦截,响应头的整体设置等,具体装饰器与触发时机对照如下:
装饰器 | 触发时机 |
---|---|
before_first_request | 第一次请求前执行,不接收任何参数,返回值会被忽略 |
before_request | 每次请求前执行,不接受任何参数,有返回值则会直接返回,不会继续执行请求,先注册先执行 |
after_request | 每次请求后执行,没有异常时执行,接收一个响应作为参数,返回一个响应,先注册后执行 |
teardown_request | 请求上下文被 pop 出请求栈时,即使有异常也会执行 |
示例代码
@app.route('/')
def index():
print('request')
return 'Hello Flask!'
@app.before_first_request
def before_first_request():
print('before_first_request')
@app.before_request
def before_request_f1():
print('before_request_f1')
# return '123' # 一旦返回程序则不会继续执行
@app.before_request
def before_request_f2():
print('before_request_f2')
@app.after_request
def after_request_f1(resp):
print('after_request_f1')
return resp
@app.after_request
def after_request_f2(resp):
print('after_request_f2')
resp.headers['xxx'] = 'yyy'
return resp
@app.teardown_request
def teardown_request(error):
print('teardown_request')
if error:
print(error)
- 访问
http://localhost:5000/
的执行结果如下:
before_first_request
before_request_f1
before_request_f2
request
after_request_f2
after_request_f1
teardown_request