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

Событие request_tearing_down

Событие request_tearing_down относится к сигналам Flask и срабатывает каждый раз, когда завершается обработка запроса. В отличие от события request_finished, оно вызывается всегда - даже если во время обработки запроса возникло необработанное исключение. Сигнал относится к пространству имён flask. Первым параметром в подключённый обработчик передаётся объект приложения app, вторым - объект исключения exc, который равен None, если запрос завершился успешно. Событие удобно использовать для очистки ресурсов, закрытия соединений и освобождения памяти после обработки запроса.

Синтаксис

from flask import request_tearing_down request_tearing_down.connect(receiver, app, [sender])

Пример

Давайте подключим обработчик к событию request_tearing_down и выведем сообщение в консоль при завершении запроса:

from flask import Flask, request_tearing_down app = Flask(__name__) def on_tearing_down(sender, exc, **extra): print('request tearing down') if exc is not None: print('with exception') request_tearing_down.connect(on_tearing_down, app) @app.route('/') def index(): return 'hello'

Результат выполнения кода при обращении к адресу '/':

request tearing down

Пример

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

from flask import Flask, request_tearing_down app = Flask(__name__) def on_tearing_down(sender, exc, **extra): if exc is not None: print('error:', exc) else: print('ok') request_tearing_down.connect(on_tearing_down, app) @app.route('/') def index(): raise ValueError('abcde')

Результат выполнения кода при обращении к адресу '/':

error: abcde

Пример

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

from flask import Flask, request_tearing_down app = Flask(__name__) class Database: def __init__(self): self.connected = True def close(self): self.connected = False db = Database() def on_tearing_down(sender, exc, **extra): if db.connected: db.close() print('db closed') request_tearing_down.connect(on_tearing_down, app) @app.route('/') def index(): return 'user'

Результат выполнения кода при обращении к адресу '/':

db closed

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

  • класс Signal,
    который представляет собой сигнал во Flask
  • метод connect,
    который подключает обработчик к сигналу
  • событие request_finished,
    которое срабатывает при успешном завершении запроса
  • событие got_request_exception,
    которое срабатывает при возникновении исключения в запросе
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить