voluptuous:如何在HTTP POST中验证json数据中的非字符串值



我正在使用flask实现一些REST API。在其中一个api中,我需要提交由经度和纬度定义的位置。所以我用httpie:

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

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

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

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

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

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

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

您也可以组合多个验证器,并且float值将传递给下一个验证器:

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

该模式将验证输入值是否可以强制为float,并且float值至少为200。

最新更新