解析瓶子中的整数列表

时间:2015-01-03 19:02:05

标签: python json rest flask flask-restful

我正在使用flask-restful,而我在构建RequestParser时遇到问题,该{ 'integer_list': [1,3,12,5,22,11, ...] # with a dynamic length } 将验证仅有整数的列表。假设格式为:

的预期JSON资源格式
from flask.ext.restful import reqparse
parser = reqparse.RequestParser()
parser.add_argument('integer_list', type=list, location='json')

...然后可以使用以下形式创建RequestParser:

{{1}}

...但我如何验证是一个整数列表?

5 个答案:

答案 0 :(得分:27)

您可以使用action='append'。例如:

parser.add_argument('integer_list', type=int, action='append')

传递多个整数参数:

curl http://api.example.com -d "integer_list=1" -d "integer_list=2" -d "integer_list=3"

您将获得一个整数列表:

args = parser.parse_args()
args['integer_list'] # [1, 2, 3]

无效请求将自动获得400 Bad Request响应。

答案 1 :(得分:2)

事实上你不能。由于您可以传递包含多种类型的列表,例如[1, 2, 'a', 'b'],使用reqparser,您只能使用type=list进行解析。 您需要自己逐个检查列表中的元素。代码如下所示:

parse_result = parser.add_argument('integer_list', type=list, location='json')
your_list = parse_result.get('integer_list', [])
for element in your_list: 
    if isinstance(element, int): 
        # do something
        print "element is int"
    else:
        # do something else
        print "element is not int"

答案 2 :(得分:0)

您需要使用“添加”操作。

from flask.ext.restful import reqparse
parser = reqparse.RequestParser()
parser.add_argument('integer_list', type=int, action="append", location='json')

args = parser.parse_args()

list_of_int = args['integer_list']

答案 3 :(得分:-1)

发生了同样的问题。我查看了源代码,发现graph = TinkerGraph.open() e0 = graph.addVertex(T.id, 0, label, "User", "name", "e0") e1 = graph.addVertex(T.id, 1, label, "User", "name", "e1") e2 = graph.addVertex(T.id, 2, label, "User", "name", "e2") e3 = graph.addVertex(T.id, 3, label, "User", "name", "e3") e4 = graph.addVertex(T.id, 4, label, "User", "name", "e4") e0.addEdge("Feedbacks", e2) e0.addEdge("Meets", e1) e2.addEdge("Feedbacks", e4) e2.addEdge("Meets", e4) e3.addEdge("Feedbacks", e0) e3.addEdge("Meets", e2) e4.addEdge("Feedbacks", e0) g = graph.traversal() 主要用于情境Argument.type。 所以你可以像我一样破解这个:

self.type(value)

这不是它应该做的,而是有效的。

答案 4 :(得分:-3)

您可以使用isinstance检查类型,在此处将类型设置为int(整数)。

这可以这样工作:

a=1    
isinstance(a,int)

评估为TRUE

要检查整个列表,请使用all()。并使用for循环遍历列表,以便检查列表的每个元素。

if all(isinstance(x,int) for x in integer_list):
    parser.add_argument('integer_list', type=list, location='json')

在你的情况下,如果所有元素都是整数并且在for循环中执行代码,则应该求值为TRUE