妖娆:如何在HTTP POST中验证来自json数据的非字符串值

时间:2015-07-09 10:54:41

标签: python json http post voluptuous

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

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

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

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

这种笨拙和有点超越性感的目的。我是以错误的方式做事,还是有更好的方式?

1 个答案:

答案 0 :(得分:1)

是的,这个库能够将值强制转换为浮点数或整数(使用CComBSTR bstrResult( /* UTF-16 string from std::string */ ); *restr = bstrResult.Detach(); )。例如:

Coerce

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

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

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

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