使用flask-restplus时,如何封送一个简单列表(无属性)的json?

时间:2019-04-06 19:58:24

标签: python-3.x list marshalling flask-restplus

我正在使用flask-restplus开发API。我的一个端点返回一个对象列表,例如

[
  {
    "id": "1342",
    "index": "meta",
    "score": 3.0630198
  },
  {
    "id": "1645",
    "index": "meta",
    "score": 3.0630198
  },
  {
    "id": "2345",
    "index": "meta",
    "score": 3.0630198
  }
]

现在我正在尝试使用字段来开发模型,以便我可以将其封送为例如,

model = namespace.model('MyModel', {
    "some_attribute":fields.List(fields.Nested(some_nested_object))
})

@namespace.route('')
class FlashcardAutocompleteAPI(Resource):
...
   @namespace.marshal_with(model,code=200)
   def get(self):
      ...

上面的代码当然可以,但是不能整理正确的结构。

有没有办法不声明“ some_attribute”部分,以使该模型将封送如上所述的json结构?试试看:

 model = namespace.model('MyModel', {
    fields.List(fields.Nested(some_nested_object))
})

我收到:

  TypeError: cannot convert dictionary update sequence element #0 to a 
  sequence

2 个答案:

答案 0 :(得分:0)

不确定是否有帮助,我遇到了类似的问题,但是使用了post方法而不是get。在这种情况下,我在方法之前使用了expect装饰器

@ns.expect(model, validate=True)

,如果我只用括号将模型包装起来,就可以了,就像这样:

@ns.expect([model] validate=True)

https://github.com/noirbizarre/flask-restplus/issues/230

中指出了解决方案

我知道这只是部分答案,但也许可以阐明这个问题。祝你好运!

答案 1 :(得分:0)

您无需声明新模型,flask-restplus可以重用<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.2/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/15.3.2/react-dom.min.js"></script> <html> <body> <label>Focus the input first (e.g. by clicking in it), then try pressing Space.</label> <input type="text" id="t11" className="attendanceInput" readonly/> </body> </html>描述的相同模型来编组单个项目或该类型的项目列表。

因此,您只需要编写如下内容:

<input type="text" id="11"  onKeyDown={this.handleKeyDown.bind()} className="attendanceInput" readOnly/>