だから私は基本的な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」は、コールバックの 1 つが予期しない動作をするたびに呼び出されます。関数をデコレートすると、元の関数に機能を追加できます。または、少なくともそれがデコレーターから理解していることです。しかし、私がこれを行うと:
@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」ファイルをすべてのメイン コードで実行すると、装飾された関数がコードに関連付けられ、必要に応じて呼び出されると思います。私の解釈が間違っているかどうかを確認するために、デコレータに関する多くの情報源を読んでみましたが、間違いを見つけることができませんでした。