什么是请求勾子?
为了让每个视图函数避免编写重复的功能代码,flask提供了通用设施的功能,就是所谓的勾子
那么请求勾子就是,在浏览器请求服务器资源的前后挂载相关的处理函数
请求勾子有什么作用?
作用:在浏览器请求服务器资源的前后挂载相关的处理函数
比如:1、浏览器请求资源之前,根据需求进行权限校验
2、请求结束之后,处理数据的交互格式......
如何使用请求勾子?
请求勾子是通过装饰器的形式实现,Flask支持如下四中请求勾子:
- before_first_request
在处理第一个请求前执行 - before_request
在每次请求前执行
如果在某修饰的函数中返回了一个相应,视图函数将不再被调用 - after_request
如果没有抛出错误,在每次请求后执行
接收一个参数:视图函数做出的响应,
在此函数中可以 对响应的值在返回之前做最后的一步修改处理
需要将参数中的响应在此参数中进行返回 - teardown_request
在每次请求后执行
接收一个参数:错误信息,如果有相关错误抛
总结:请求勾子类似于装饰器,可以在不修改函数内部的逻辑前提下增加逻辑.
from flask import Flask app = Flask(__name__) class Config(object): DEBUG = True app.config.from_object(Config) @app.before_first_request def before_first_request(): """第一次请求视图函数时才会调用""" print("before_first_request") @app.before_request def before_request(): """每次请求视图函数之前会调用此函数""" print("before_request") @app.after_request def after_request(response): """在请求之后会调用,并且在函数里会接受一个参数:响应,并且还要将响应返回""" print("after_request") print(response) # response可以得到视图函数返回的相关响应数据:<Response 14 bytes [200 OK]> # 在此函数中可以对响应的数据做统一的处理 return response @app.teardown_request def teardown_request(error): """在请求之后会执行,如果请求的函数有异常,会把具体的异常传递到此函数""" print("teardown_request") @app.route('/') def hello_world(): return 'Hello World!!!' if __name__ == '__main__': app.run()