1.Flask中请求钩子的理解和应用
before_first_request: 在处理第一个请求前运行
before_request:在每次请求前运行
after_request:如果没有未处理的异常,在每次请求后运行。
teardown_request:即使有未处理的异常抛出,在每次请求后运行。
2.具体代码
class AppHolder(object):
def init(self, app, db):
“”“init before request”""
self.app = app # flask对象
self.db = db # 数据库连接
self.app.before_request(self.before_request) self.app.teardown_request(AppHolder.teardown_request)
def before_request(self): # 每个实例对象有自己一份
"""handle before request"""
session = self.db.make_session()
g.pg_db = session()
g.es = EsBase.create_es_client()
@staticmethod # 每个对象共享
def teardown_request(exception):
"""handle after request"""
db_session = g.get("pg_db")
if db_session:
db_session.close()
if exception is not None:
logging.warn("[{0} {1}] an exception occurred to this request: {2}"
.format("app.py", "WingsAppHolder", exception), exc_info=1)