编程语言
首页 > 编程语言> > python – Flask如何知道调用哪个装饰函数?

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

作者:互联网

所以我正在阅读基本的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)的函数列表(self.teardown_appcontext_funcs)中.当appcontext被拆除时,该列表以相反的顺序迭代,每个函数被传递触发拆除的异常,或者如果没有引发则占位符异常.这发生在Flask.do_teardown_appcontext()中.

标签:python-decorators,python,flask
来源: https://codeday.me/bug/20190831/1779372.html