【问题标题】:Using RequestParser from Flask to validate that float arguments fall within range使用 Flask 中的 RequestParser 验证浮点参数是否在范围内
【发布时间】:2021-02-23 18:41:49
【问题描述】:

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

我可以运行一些 if-else 函数来检查我的 API 对象中的每个解析参数,但这似乎有点罗嗦。我想知道是否有更简洁的方法可以使用 RequestParser 对象来做到这一点?如果不是 RequestParser 对象,是否有另一个包(与 Flask Restplus 兼容)可用于解析我的浮点输入?

【问题讨论】:

    标签: python flask flask-restful flask-restplus flask-restx


    【解决方案1】:

    您可以定义自己的验证函数并将其传递给 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))
    

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 2020-02-23
      • 2013-10-14
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 2019-12-09
      • 2015-08-16
      相关资源
      最近更新 更多