【问题标题】:voluptuous: how to validate non-string value from json data in HTTP POSTvoluptuous:如何在 HTTP POST 中验证来自 json 数据的非字符串值
【发布时间】:2015-09-27 16:49:20
【问题描述】:

我正在用烧瓶实现一些 REST API。在其中一个 API 中,我需要提交一个由经度和纬度定义的位置。所以我很自然地用 httpie 来做这个:

http POST :5000/api/v1.0/foo lng=12.34 lat=56.78

在烧瓶端,我使用 voluptuous 来验证 JSON 数据。但是,后端收到的所有数据都是unicode 类型的。我必须这样做:

try:
  lng = atof(data['lng'])
  schema(data)
except KeyError:
  raise SomeError
except MultipleInvalid:
  raise SomeError

这感觉很笨拙,有点超出了性感的目的。我做错了还是有更好的方法?

【问题讨论】:

    标签: python json http post voluptuous


    【解决方案1】:

    是的,这个库能够将值强制转换为浮点数或整数(使用Coerce)。例如:

    >>> from voluptuous import *
    >>> schema = Schema(Coerce(float))
    >>> schema('1.10')
    1.1
    >>> schema(2.2)
    2.2
    

    这意味着它可以接受普通的浮点数,但也可以接受可以转换为浮点数的 (Unicode) 字符串。结果值是一个浮点数。

    您还可以组合多个验证器,浮点值将传递给下一个验证器:

    schema = Schema(All(Coerce(float), Range(min=200)))
    

    此架构将验证输入值是否可以强制为浮点数,并且浮点值至少为 200。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      相关资源
      最近更新 更多