Разобрать uuid с параметризованного маршрута в соколе

У меня есть falcon приложение с параметризованным маршрутом для получения ресурсов. Пользователь не знает uuid ресурса, потому что он временный, поэтому требуется перенаправление.

Пользователь выполнит запрос GET / транзакции и перенаправит на возвращенный путь 302 найденного ответа.

Как я могу разобрать uuid из пути запроса?

Приложение будет выглядеть так:

api = falcon.API()
api.add_route('/transaction', Transaction)
api.add_route('/transaction/{id}', TransactionItem))

И источники примерно так:

class Transaction(object):    

    def on_get(self, req, resp):     
        id = get_current_id()
        resp.status = falcon.HTTPFound('/TransactionItem/{}'.format(id))

class TransactionItem(object):
    def on_get(self, req, resp):
        // Parse id from path?
        transaction = get_transaction(id)
        // ...
        // include info in the response, etc
        resp.status = falcon.HTTP_200

1 ответ

Решение

Итак.

Flacon передает совпадающие поля маршрута в качестве аргументов ключевых слов. Это означает, что это в вашем TransactionItem класс твой on_get должно иметь одно из (Вы можете выбрать тот, который более понятен для Вас) заданных определений:

# 1st way
def on_get(self, req, resp, id=None):
    ...

# 2nd way (**kwargs catches all keywords args)
def on_get(self, req, resp, **kwargs):
    id = kwargs.get('id')

Переданное поле будет передано по умолчанию как str если вы хотите, чтобы он был преобразован соколом, вы можете использовать встроенный в сокол UUIDConverter

Вот документы для конвертера: https://falcon.readthedocs.io/en/stable/api/routing.html

Другие вопросы по тегам