Я начинаю с 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 не предоставляет встроенную функцию/декоратор, чтобы сделать то же самое. Существует ли это лучше? Декоратор/функция встроенного фляги?
Спасибо за вашу помощь.
Flask не предоставляет встроенный... Flask - это микро-каркас, который был построен вокруг подключаемого подхода. Если вы хотите больше, используйте расширения (Flask-restful является одним из них, как было сказано в комментариях), или python marshmallow, или другой lib, или напишите свою собственную реализацию.
Функциональность 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
reqparse.RequestParser
для анализа и проверки данных запроса среди других тонкостей.