所以我正在阅读基本的 Flask 教程,并查看他们的代码,有这个片段:
@app.teardown_appcontext
def close_db_connection(exception):
"""Closes the database again at the end of the request."""
top = _app_ctx_stack.top
if hasattr(top, 'sqlite_db'):
top.sqlite_db.close()
现在,对于我在他们的手册中读到的内容,只要其中一个回调有意外行为,就会调用函数“app.teardown_appcontext”。用它装饰一个函数允许您向原始函数添加功能。或者至少这是我从装饰者那里了解到的。但是,如果我这样做:
@app.teardown_appcontext
def stack_overflow_rocks(exception):
"""Closes the database again at the end of the request."""
top = _app_ctx_stack.top
if hasattr(top, 'sqlite_db'):
top.sqlite_db.close()
它仍然有效。Flask 如何管理这个?
我的猜测是,当我使用所有主要代码运行“flaskr.py”文件时,它会将任何修饰函数与其代码相关联,以便在必要时调用它。我尝试阅读很多关于装饰器的资料,看看我的解释是否错误,但找不到任何错误。