Spec-Zone.ru › Falcon 1.4

Крючки

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.
falcon.after(action, *args, **kwargs) [source]

Декоратор для выполнения заданной функции действия после обработчика.

Параметры:
  • action (callable) – Функция вида func(req, resp, resource), где resource — ссылка на экземпляр класса ресурса, связанный с запросом
  • *args – Любые дополнительные аргументы будут переданы в action в заданном порядке, сразу после аргументов req, resp, resource и params.
  • **kwargs – Любые дополнительные ключевые аргументы будут переданы в action.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API