Крючки
Falcon поддерживает крючки перед и после. Вы устанавливаете крючок, просто применив один из декораторов ниже, либо к отдельному обработчику, либо к всему ресурсу.
Например, рассмотрите этот крючок, который проверяет корректность POST-запроса для ресурса изображения:
def validate_image_type(req, resp, resource, params):
if req.content_type not in ALLOWED_IMAGE_TYPES:
msg = 'Image type not allowed. Must be PNG, JPEG, or GIF'
raise falcon.HTTPBadRequest('Bad request', msg)
Вы прикрепите этот крючок к обработчику on_post следующим образом:
@falcon.before(validate_image_type)
def on_post(self, req, resp):
pass
Или, предположим, у вас есть крючок, который вы хотите применить ко всем обработчикам для данного ресурса. В этом случае вы просто декорируете класс ресурса:
@falcon.before(extract_project_id)
class Message(object):
def on_post(self, req, resp, project_id):
pass
def on_get(self, req, resp, project_id):
pass
Обратите также внимание, что вы можете передавать дополнительные аргументы в свою функцию-крючок по мере необходимости:
def validate_image_type(req, resp, resource, params, allowed_types):
if req.content_type not in allowed_types:
msg = 'Image type not allowed.'
raise falcon.HTTPBadRequest('Bad request', msg)
@falcon.before(validate_image_type, ['image/png'])
def on_post(self, req, resp):
pass
Falcon поддерживает использование любого вызываемого объекта в качестве крючка. Это позволяет использовать класс вместо функции:
class Authorize(object):
def __init__(self, roles):
self._roles = roles
def __call__(self, req, resp, resource, params):
pass
@falcon.before(Authorize(['admin']))
def on_post(self, req, resp):
pass
Falcon компоненты-посредники также могут быть использованы для вставки логики перед и после запросов. Однако, в отличие от крючков, компоненты-посредники срабатывают глобально для всех запросов.
-
falcon.before(action, *args, **kwargs)[source] -
Декоратор для выполнения заданной функции действия перед обработчиком.
Параметры: -
action (callable) –
Функция вида
func(req, resp, resource, params), гдеresource— ссылка на экземпляр класса ресурса, связанный с запросом, аparams— словарь имён полей URI-шаблона, если таковые имеются, которые будут переданы в обработчик ресурса в качестве аргументов kwargs.Примечание
Крючки могут вводить дополнительные параметры по мере необходимости. Например:
def do_something(req, resp, resource, params): try: params['id'] = int(params['id']) except ValueError: raise falcon.HTTPBadRequest('Invalid ID', 'ID was not valid.') params['answer'] = 42 - *args – Любые дополнительные аргументы будут переданы в action в заданном порядке, сразу после аргументов req, resp, resource и params.
- **kwargs – Любые дополнительные ключевые аргументы будут переданы в action.
-
action (callable) –
-
falcon.after(action, *args, **kwargs)[source] -
Декоратор для выполнения заданной функции действия после обработчика.
Параметры: -
action (callable) – Функция вида
func(req, resp, resource), гдеresource— ссылка на экземпляр класса ресурса, связанный с запросом - *args – Любые дополнительные аргументы будут переданы в action в заданном порядке, сразу после аргументов req, resp, resource и params.
- **kwargs – Любые дополнительные ключевые аргументы будут переданы в action.
-
action (callable) – Функция вида
© 2012–2017 by Rackspace Hosting, Inc. and other contributors
Licensed under the Apache License, Version 2.0.
https://falcon.readthedocs.io/en/1.4.1/api/hooks.html