Метод trigger_hook
Метод trigger_hook применяется к приложению
Bottle и вызывает все функции, которые были
зарегистрированы для определённого события через
метод add_hook. Первым параметром передаётся
имя события, например 'before_request' или
'after_request'. Все последующие аргументы
будут переданы в каждую функцию-обработчик. Метод
возвращает список результатов, полученных от
обработчиков. Если хотя бы один обработчик вернёт
значение, отличное от None, выполнение
останавливается, а это значение возвращается
немедленно.
Синтаксис
@app.trigger_hook(name, *args, **kwargs)
Пример
Давайте зарегистрируем обработчик события
'before_request' и вручную запустим его
через trigger_hook:
from bottle import Bottle
app = Bottle()
def log_request():
print('request started')
app.add_hook('before_request', log_request)
res = app.trigger_hook('before_request')
print(res)
Результат выполнения кода:
request started
[None]
Пример
Давайте передадим аргументы в обработчик и посмотрим, как возвращаемое значение прерывает цепочку вызовов:
from bottle import Bottle
app = Bottle()
def check_user(name):
if name == 'user':
return 'access denied'
def second_check(name):
print('second check for', name)
app.add_hook('before_request', check_user)
app.add_hook('before_request', second_check)
res = app.trigger_hook('before_request', 'user')
print(res)
Результат выполнения кода:
access denied
Обратите внимание: второй обработчик second_check
не был вызван, потому что первый вернул не
None.
Пример
Давайте соберём результаты нескольких
обработчиков, каждый из которых возвращает
None:
from bottle import Bottle
app = Bottle()
def hook_one():
pass
def hook_two():
pass
app.add_hook('after_request', hook_one)
app.add_hook('after_request', hook_two)
res = app.trigger_hook('after_request')
print(res)
Результат выполнения кода:
[None, None]
Смотрите также
-
метод
add_hook,
который регистрирует обработчик события -
метод
remove_hook,
который удаляет обработчик события -
метод
hook,
который является декоратором для регистрации обработчиков -
событие
before_request,
которое срабатывает перед обработкой запроса