请求钩子,起到的是中间件的作用。

类似于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)

在每次请求后执行,有没有错误都会执行
接受一个参数:错误信息,如果有相关错误抛出

  1. @app.before_first_request
  2. def first_re():
  3. print('这是第一次请求')
  4. @app.before_request
  5. def before_re():
  6. print('这是请求前的请求')
  7. @app.after_request
  8. def aft_re(response):
  9. print('这是after的请求')
  10. return response
  11. @app.teardown_request
  12. def tear_re(response):
  13. print('这是最终的请求')