Flask: декоратор для проверки аргументов строки запроса - PullRequest
0 голосов
/ 18 октября 2018

Я начинаю с 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 ]

0 голосов
/ 27 июня 2019

Функция декоратора:

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 голосов
/ 19 октября 2018

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

...