如何在列表的解析参数中解析列表(字符串)而不是列表(char)?

时间:2018-02-19 11:14:21

标签: python-3.x list flask flask-restful

我在烧瓶中使用flask_restful

我的代码如下:

from flask_restful import Resource, reqparse

apilink_parser = reqparse.RequestParser()
apilink_parser.add_argument('provider_id', type=int,required=True)
apilink_parser.add_argument('name', type=str, required=True)
apilink_parser.add_argument('func_id', type=int)
apilink_parser.add_argument('method', type=str)
apilink_parser.add_argument('url', type=str)
apilink_parser.add_argument('parameter',type=list)
apilink_parser.add_argument("expectreturn", type=list)


@marshal_with(apilink_fields)
def post(self):
    args = apilink_parser.parse_args()
    print(args)
    # user owns the task
    task = APILink.create(**args)
    return task, 201

我的json发布数据如:

{ 
"name":"riskiqwhois",
"provider_id":1,
"func_id":1,
"url":"myurl",
"parameter":["query"],  //******//
"expectreturn":[],
"method":"post"
 }

但是当我打印arrgs时,结果是:

 {
 'provider_id': 1, 
 'name': 'riskiqwhois', 
 'func_id': 1, 
 'method': 'post', 
 'url': 'myurl', 
 'parameter': ['q', 'u', 'e', 'r', 'y'], //******//
 'expectreturn': None
  }

我想要 你可以看到我想要的参数是字符串列表,它只是一个名为" query"的元素,但是转换到数据库的真实参数是[' q',' u&# 39;,' e',' r',' y'],如何使参数是字符串列表而不是char列表?如何确保数据是列表(字符串)?

3 个答案:

答案 0 :(得分:1)

您可以通过在请求解析器中添加 action =“append”来解决此问题 如下所示

apilink_parser.add_argument('parameter',type=str,action="append")
apilink_parser.add_argument("expectreturn", type=list,action="append")

这将使您返回输出

 {
 'provider_id': 1, 
 'name': 'riskiqwhois', 
 'func_id': 1, 
 'method': 'post', 
 'url': 'myurl', 
 'parameter': ['query'],
 'expectreturn': None
  }

答案 1 :(得分:1)

好吧,您忘记设置action="append",应该从type = list更改为type = str。 如果不是这样,您仍然会得到类似[['q','u','e','r','y']]]的结果。

...
apilink_parser.add_argument('parameter',type=str, action='append')
apilink_parser.add_argument("expectreturn", type=str, action='append')

答案 2 :(得分:0)

我认为原因是你没有设置location(json)。例如:

apilink_parser.add_argument('parameter', type=list, location='json')

另请确保您已发送标头Content-Type: application/json

希望这有帮助。