我从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没有提供内置函数/装饰器来做同样的事情。 这样做更好吗?内置烧瓶装饰器/功能吗?
感谢您的帮助。
答案 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