Flask-故障编组简单对象

问题描述 投票:0回答:1

我正在尝试在Flask中封送一个简单的数据结构,如下所示:

{
    "globalNum": 1.23,
    "perResultData": [
        {
            "string1": "test string",
            "num1": 1.25
        },
        {
            "string1": "test",
            "num1": 1.22
        }
    ]
}

我正在像这样建模该结构:

testmodel = api.model('Model', {
    'globalNum': fields.Float,
    'perResultData': fields.List(fields.Nested({ 
            "string1": fields.String,
            "num1": fields.Float
    }))
})

[当我尝试进行此设置时(按照下面的最少失败代码),如果浏览到本地主机,则会收到警告:“未提供API定义。”并且Flask控制台显示:

File "/home/mikea/.local/lib/python3.6/site-packages/flask_restplus/swagger.py", line 574, in register_model
    if name not in self.api.models:
TypeError: unhashable type: 'dict'

当我注释掉'@ api.marshal_with(testmodel)'行时,Flask可以完美地工作。有人可以告诉我我在做什么错吗?非常感谢

完整代码:

from flask_restplus import Resource, Api,fields

app = Flask(__name__)
api = Api(app)

testmodel = api.model('Model', {
    'globalNum': fields.Float,
    'perResultData': fields.List(fields.Nested({ 
            "string1": fields.String,
            "num1": fields.Float
    }))
})

@api.route('/')
class incomingRequest(Resource):
    @api.marshal_with(testmodel)
    def post(self):
        return {"globalNum":3.2,
                "perResultData":[
                    {
                        "string1": "test string",
                        "num1": 1.25
                    },
                    {
                        "string1": "test",
                        "num1": 1.22
                    }
                ]}

if __name__ == '__main__':
    app.run(debug=True)
python flask flask-restful
1个回答
0
投票

答案在这里-https://github.com/noirbizarre/flask-restplus/issues/292

嵌套模型时,必须将它们包装在模型类中,如下所示:

testmodel = api.model('Model', {
    'globalNum': fields.Float,
    'perResultData': fields.List(fields.Nested(api.model({ 
            "string1": fields.String,
            "num1": fields.Float
    })))
})
© www.soinside.com 2019 - 2024. All rights reserved.