Так что я иду через основной Колба учебник, и, глядя на их код есть этот фрагмент:Как 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()
Он по-прежнему работает. Как Флакс управляет этим?
Я предполагаю, что когда я запускаю файл «flaskr.py» со всем основным кодом, он связывает любую украшенную функцию своим кодом, чтобы вызвать ее, когда это необходимо. Я пробовал читать много источников о декораторе, чтобы понять, не ошибается ли моя интерпретация, но не смог найти никакой ошибки.
Отличное объяснение, все имеет смысл сейчас. Благодаря! – dccarmo