Событие after_request
Событие after_request применяется к приложению
Bottle и вызывает указанную функцию после того,
как маршрут обработал запрос, но до того, как
ответ будет отправлен клиенту. Событие удобно
использовать для логирования, добавления заголовков,
замера времени выполнения запроса и других задач,
которые должны выполняться для каждого запроса.
Функция-обработчик не принимает аргументов.
Синтаксис
@app.after_request
def callback():
pass
Пример
Давайте зарегистрируем обработчик события after_request,
который выводит сообщение в консоль после каждого запроса:
from bottle import Bottle
app = Bottle()
@app.after_request
def after():
print('request processed')
@app.route('/')
def index():
return 'hello'
Результат выполнения кода для адреса /:
hello
При этом в консоль будет выведено:
request processed
Пример
Давайте добавим пользовательский заголовок к каждому ответу
через событие after_request:
from bottle import Bottle, response
app = Bottle()
@app.after_request
def add_header():
response.set_header('X-App', 'bottle')
@app.route('/')
def index():
return 'hello'
Теперь каждый ответ будет содержать заголовок
X-App со значением bottle. Результат
выполнения кода для адреса /:
hello
Пример
Давайте измерим время выполнения запроса с помощью
события after_request:
import time
from bottle import Bottle, request
app = Bottle()
@app.before_request
def start_timer():
request.start_time = time.time()
@app.after_request
def log_time():
elapsed = time.time() - request.start_time
print('elapsed:', elapsed)
@app.route('/')
def index():
return 'hello'
После обработки запроса в консоль будет выведено примерное время выполнения в секундах:
elapsed: 0.00012
Смотрите также
-
событие
before_request,
которое вызывается перед обработкой запроса -
метод
hook,
который регистрирует обработчик события -
метод
add_hook,
который добавляет функцию к событию -
класс
Bottle,
который представляет приложение Bottle