РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
563 of 643 menu

Событие appcontext_tearing_down

Событие appcontext_tearing_down относится к сигналам Flask и срабатывает, когда контекст приложения начинает разрушаться. Это происходит при выходе из блока with app.app_context или после завершения обработки запроса, когда Flask автоматически создавал контекст приложения. Событие позволяет выполнить код очистки: закрыть соединения с базой данных, освободить ресурсы или сохранить промежуточные данные. Обработчику передаётся аргумент exc - исключение, из-за которого контекст разрушается, или None, если разрушение проходит нормально.

Сигнал доступен через объект appcontext_tearing_down из модуля flask. Подписка на событие выполняется методом connect, а обработчик получает первым аргументом объект отправителя (обычно само приложение Flask), вторым - значение exc.

Синтаксис

from flask import appcontext_tearing_down appcontext_tearing_down.connect(handler, sender)

Пример

Давайте подпишемся на событие и выведем сообщение при разрушении контекста приложения:

from flask import Flask, appcontext_tearing_down app = Flask(__name__) def on_tearing_down(sender, exc): print('app context tearing down') print('exc:', exc) appcontext_tearing_down.connect(on_tearing_down, app) with app.app_context(): print('inside app context')

Результат выполнения кода:

"inside app context" "app context tearing down" "exc: None"

Пример

Давайте проверим, что при возникновении исключения внутри контекста приложения обработчик получит его в аргументе exc:

from flask import Flask, appcontext_tearing_down app = Flask(__name__) def on_tearing_down(sender, exc): if exc is not None: print('error:', exc) else: print('no error') appcontext_tearing_down.connect(on_tearing_down, app) try: with app.app_context(): raise ValueError('abcde') except ValueError: pass

Результат выполнения кода:

"error: abcde"

Пример

Давайте используем событие для закрытия ресурса, открытого внутри контекста приложения:

from flask import Flask, appcontext_tearing_down app = Flask(__name__) resource = {'open': False} def on_tearing_down(sender, exc): if resource['open']: resource['open'] = False print('resource closed') appcontext_tearing_down.connect(on_tearing_down, app) with app.app_context(): resource['open'] = True print('resource opened')

Результат выполнения кода:

"resource opened" "resource closed"

Смотрите также

  • событие appcontext_pushed,
    которое срабатывает при создании контекста приложения
  • событие appcontext_popped,
    которое срабатывает после разрушения контекста приложения
  • событие request_tearing_down,
    которое срабатывает при разрушении контекста запроса
  • метод connect,
    который подписывает обработчик на сигнал
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить