gpt4 book ai didi

python - Flask 如何知道要调用哪个装饰函数?

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:17 25 4
gpt4 key购买 nike

所以我正在学习基本的 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”文件时,它会将任何装饰函数与其代码相关联,以便在必要时调用它。我试着阅读了很多关于装饰器的资料,看看我的解释是否错误,但没有发现任何错误。

最佳答案

正如您在 the code 中看到的那样,装饰器将您用它装饰的函数添加到 Flask 对象实例(app 在您的案件)。当 appcontext 被拆除时,这个列表将以相反的顺序迭代,每个函数都会传递触发拆除的异常,或者如果没有引发异常则传递一个占位符异常。这发生在 Flask.do_teardown_appcontext() 中。

关于python - Flask 如何知道要调用哪个装饰函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com