我正在尝试解析每项服务的一个或多个“部长/发言人”的列表。在对API的RESTful调用中。我正在使用argparse:
from flask_restful import Resource, reqparse
parser = reqparse.RequestParser()
parser.add_argument('service_id',
type=int,
required=True,
help="Every service needs a service id.")
parser.add_argument('church_id',
type=int,
required=True,
help="Every service needs a church id.")
parser.add_argument('speakers',
type = list,
default=[],
required=True,
help="Every service needs at least one minister.")
这是我的要求:
{
"service_id": 1,
"church_id": 1,
"speakers": [1,2]
}
这是我的回复:
{
"message": {
"speakers": "Every service needs at least one minister."
}
}
无论出于何种原因,它都不会将[1,2]读入列表...
我尝试过:
答案 0 :(得分:0)
有两种方法可以通过 reqparse
为一个参数传递多个值来实现等效功能。使用 action=
关键字参数,action=split
或 action=append
。
使用 split
,您将传入一个逗号分隔的字符串,它会执行类似 <<argument>>.split(',')
的操作,在解析时返回一个列表。
您的请求将如下所示:
{
"service_id": 1,
"church_id": 1,
"speakers": "1,2"
}
另一种选择是使用 append
操作,我认为您正在寻找它。它将保留类型 int
(带有 type=int
关键字参数)。使用 append,示例中给出的扬声器参数将解析为列表。您将传递相同的列表作为参数:
{
"service_id": 1,
"church_id": 1,
"speakers": [1,2]
}
在命令行中,您将使用 append 参数多个参数,例如:
curl http://api.example.com -d "speakers=bob" -d "speakers=sue" -d "speakers=joe"
有关详细信息,请参阅 documentation。