使用Flask中的RequestParser验证浮点参数是否在范围内



我正在Python上使用Flask Restplus创建一个API,该API接受位置信息字典(例如{lat:10,lon:80}(,进行一些数学建模,并输出结果。我目前正在使用RequestParser对象来解析参数。我需要对坐标进行一些错误处理,以确保我的API能够返回正确的错误(例如,当提供的纬度或经度超出范围时(。因此,我需要对解析后的参数运行一些验证。

我可以运行一些if-else函数来检查API对象中的每个解析参数,但这似乎有点冗长。我想知道是否有一种更干净的方法可以使用RequestParser对象来实现这一点?如果不是RequestParser对象,是否还有另一个包(与Flask Restplus兼容(可以用来解析我的浮点输入?

您可以定义自己的验证函数并将其传递给reqparser:

def float_range(min=0, max=255):
def validate(value):
if not isinstance(value, float):
raise ValueError("Invalid literal for float(): {0}".format(s))
length = len(s)
if min <= value <= max:
return s
raise ValueError(f"Value must be in range [{min}, {max}]")
return validate

然后你只需要在reqparser中使用它,比如:

parser.add_argument("lat", type=float_range(0, 90))

最新更新