Flask: декоратор для проверки аргументов строки запроса

1

Я начинаю с Flask и пытаюсь создать лучший код. Для некоторого простого маршрута я хотел бы проверить, имеются ли какие-либо необходимые аргументы. В это время я создаю этот декоратор

def validate_qs_arguments(arguments):
    def decorator(fn):
        def wrapped_function(*args, **kwargs):
            for argument_name in arguments:
                if request.args.get(argument_name) is None:
                    abort(400, "'{name}' argument is missing".format(name=argument_name))
            return fn(*args, **kwargs)
        return update_wrapper(wrapped_function, fn)
    return decorator

Я могу использовать его так:

@validate_qs_arguments(arguments=["pid", "datastream"])

Он работает нормально. Но я беспокоюсь, что Flask не предоставляет встроенную функцию/декоратор, чтобы сделать то же самое. Существует ли это лучше? Декоратор/функция встроенного фляги?

Спасибо за вашу помощь.

  • 2
    AFAIK, фляга оставляет вам возможность выбрать собственных декораторов для вашей бизнес-логики. Вам следует взглянуть на проект flask_restful, если вы создаете службу REST API в flask. Он предоставляет класс reqparse.RequestParser для анализа и проверки данных запроса среди других тонкостей.
Теги:
flask
decorator

2 ответа

1

Flask не предоставляет встроенный... Flask - это микро-каркас, который был построен вокруг подключаемого подхода. Если вы хотите больше, используйте расширения (Flask-restful является одним из них, как было сказано в комментариях), или python marshmallow, или другой lib, или напишите свою собственную реализацию.

0

Функциональность Decorator:

def check_form_key(key_list:list):
    def real_decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            if request.form is None:
                return Result(False, Error("FR"))
            not_exist_key = []
            for key in key_list:
                if key in request.form:
                    continue
                else:
                    not_exist_key.append(key)

            if len(not_exist_key) > 0:
                return Result(False,"this keys not exist {0}".format(not_exist_key))
            return func(*args, **kwargs)
        return wrapper
    return real_decorator

Использование:

@check_form_key(["name","code"])
def check():
   pass
  • 0
    Для этого нужно больше контекста - объяснение кода, если хотите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню