我正在使用flask-restful,而我在构建RequestParser
时遇到问题,该{
'integer_list': [1,3,12,5,22,11, ...] # with a dynamic length
}
将验证仅有整数的列表。假设格式为:
from flask.ext.restful import reqparse
parser = reqparse.RequestParser()
parser.add_argument('integer_list', type=list, location='json')
...然后可以使用以下形式创建RequestParser:
{{1}}
...但我如何验证是一个整数列表?
答案 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