在flask_restplus RequestParser中添加多个JSON字段

时间:2019-11-26 07:17:01

标签: python flask flask-restplus

我要expect一个请求,其中request.json如下:

{
  "app_name": "app",
  "model_name": "model"
}

我创建了以下解析器:

parser = reqparse.RequestParser()
parser.add_argument('app_name', location='json', required=True)
parser.add_argument('model_name',  location='json', required=True)

并且正在将解析器用作:

class ModelList(Resource):
    @api.expect(parser)
    def get(self):
    """Get all matching model records"""
    ....

这在服务中显示为:

enter image description here

但是当我尝试此操作时,我的请求被翻译为以下内容:

enter image description here

我希望请求看起来像这样:

curl -X GET "http://localhost:5000/model" -H  "accept: application/json" -H  "Content-Type: application/json" -d '{"app_name": "test","model_name": "affinity"}'

而不是:

curl -X GET "http://localhost:5000/model" -H  "accept: application/json" -H  "Content-Type: application/json" -d "affinity"

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

  

TypeError:HEAD或GET请求不能具有正文。

请参阅此SO问题,为什么它不能(不应)有一个:HTTP GET with request body

要解决此问题,请删除location='json'或指定location='args'

parser = reqparse.RequestParser()
parser.add_argument('app_name', required=True)
parser.add_argument('model_name', required=True)
parser = reqparse.RequestParser()
parser.add_argument('app_name', location='args', required=True)
parser.add_argument('model_name', location='args', required=True)

两者都会让Swagger知道将查询字符串中的参数发送出去,而解析器则知道在其中查找。