请求钩子,起到的是中间件的作用。
类似于servlet的过滤器。
对于中间层,可以以类来理解,每个中间层/类,都有pre_process 和after_process的方法。
请求的处理过程
pre_process -> view -> after_process
假设有多个middleware,m1,m2,m3,实际执行的顺序为:
m1.pre_process() - m2.pre_process() - m3.pre_process() - view() -m3.after_process() - m2.after_process - m1.after_process() - 客户端
中间件处理不区分具体哪个视图,对所有试图均生效。
flask支持四种请求钩子
before_first_request、before_request、after_request、teardown_request
两个前处理,两个后处理。
before_first_request
before_request
在每次请求前执行
如果在某修饰的函数中返回了一个响应,视图函数将不再被调用
after_request(response)
如果视图函数没有抛出错误,在每次请求后执行
必须接受一个参数:视图函数做出的响应
在此函数中可以对响应值在返回之前做最后一步修改处理
需要将参数中的响应在此参数中进行返回,即返回response
teardown_request(reponse)
在每次请求后执行,有没有错误都会执行
接受一个参数:错误信息,如果有相关错误抛出
@app.before_first_request
def first_re():
print('这是第一次请求')
@app.before_request
def before_re():
print('这是请求前的请求')
@app.after_request
def aft_re(response):
print('这是after的请求')
return response
@app.teardown_request
def tear_re(response):
print('这是最终的请求')