解析flask restfu中的整数列表

2024-06-16 09:06:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用flask-restful,并且我在构造一个RequestParser来验证一个仅包含整数的列表时遇到问题。假设表单的预期JSON资源格式:

{
    'integer_list': [1,3,12,5,22,11, ...] # with a dynamic length
}

。。。然后使用如下表单创建一个RequestParser:

from flask.ext.restful import reqparse
parser = reqparse.RequestParser()
parser.add_argument('integer_list', type=list, location='json')

。。。但是如何验证整数列表?


Tags: restfuljsonparserflask表单列表格式with
3条回答

您可以使用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个错误请求响应。

事实上你不能。由于可以使用reqparser传递具有多种类型(例如[1, 2, 'a', 'b'])的列表,因此只能使用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"

您可以使用isinstance检查类型,在这里您将类型设置为int(integer)。

它的工作原理如下:

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

相关问题 更多 >