Flask:装饰器以测试查询字符串参数

时间:2018-10-18 12:15:01

标签: python flask decorator

我从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 :(得分:1)

Flask不提供内置功能... Flask是围绕插件方法构建的微框架。如果您想获得更多收益,请使用extensions(Flask-restful是注释中所说的其中之一)或python marshmallow或其他lib,或编写自己的实现。

答案 1 :(得分:0)

装饰器功能:

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