Метод teardown_request
Метод teardown_request применяется к приложению
Flask и регистрирует функцию, которая выполняется
после завершения обработки запроса. Функция вызывается
даже в том случае, если во время обработки запроса
произошло исключение. Первым параметром передаётся
функция-обработчик. Она принимает один аргумент -
исключение exception, которое возникло при
обработке запроса, либо None, если ошибки не было.
Метод удобно использовать для освобождения ресурсов: закрытия соединений с базой данных, файлов, сброса кэша и другой очистки, которая должна произойти после каждого запроса.
Синтаксис
@app.teardown_request
def teardown_func(exception):
...
Пример
Давайте зарегистрируем функцию, которая выводит сообщение после завершения запроса:
from flask import Flask
app = Flask(__name__)
@app.teardown_request
def teardown(exception):
print('request finished')
@app.route('/')
def index():
return 'hello'
После обращения к адресу / в консоль будет
выведено:
"request finished"
Пример
Давайте обработаем исключение, возникшее во время
запроса. Если ошибки не было, аргумент exception
равен None:
from flask import Flask
app = Flask(__name__)
@app.teardown_request
def teardown(exception):
if exception is None:
print('no errors')
else:
print('error:', exception)
@app.route('/')
def index():
return 1 / 0
После обращения к адресу / в консоль будет
выведено:
"error: division by zero"
Пример
Давайте используем метод для закрытия соединения с базой данных после каждого запроса:
from flask import Flask
app = Flask(__name__)
db = {'connected': True}
@app.teardown_request
def close_db(exception):
if db['connected']:
db['connected'] = False
print('db closed')
@app.route('/')
def index():
return 'hello'
После обращения к адресу / в консоль будет
выведено:
"db closed"
Смотрите также
-
класс
Flask,
который представляет приложение Flask -
метод
before_request,
который вызывает функцию перед каждым запросом -
метод
after_request,
который вызывает функцию после успешного запроса -
метод
errorhandler,
который регистрирует обработчик ошибок