带有变量键的编组词典,在restful / plus

时间:2016-01-14 18:47:51

标签: flask marshalling flask-restful flask-restplus

我正在使用flask-restful构建API。我也使用flask-resfulplus来生成swagger文档。我想返回一个项目字典,其中密钥将根据项目而变化。我的模型看起来像这样:

item = api.model('Item',{
            'item':fields.Integer()}) <- This is wrong


ItemModel = api.model('ItemsList', {
        '_header': fields.Nested(_header),
        'items':fields.Nested(item)
})

请注意,我尝试了一些变体,但似乎没有任何效果;这只是最新的互动。

我正在寻找的回应是这样的。

{
        '_header':{} <-This works fine
        'items': {
         'item1':5,
         'item2':2
         }
    }

项目词典中的项目将具有项目的不同键和计数作为值。

我已经尝试将项目字段设置为field.Raw()并且它工作正常,但它没有显示在swagger文档中。

请注意,我不想返回我正在使用的字典列表。

由于

1 个答案:

答案 0 :(得分:0)

有时您有自己的自定义格式需求。您可以将这些字段子类化。原始类并实现format函数。当属性存储多条信息时,这特别有用。例如一个位域,其各个位代表不同的值。您可以使用字段将单个属性多路复用到多个输出值。

如果您不知道要取消编组的字段的名称,则可以使用通配符。

>>> from flask_restplus import fields, marshal
>>> import json
>>>
>>> wild = fields.Wildcard(fields.String)
>>> wildcard_fields = {'*': wild}
>>> data = {'John': 12, 'bob': 42, 'Jane': '68'}
>>> json.dumps(marshal(data, wildcard_fields))
>>> '{"Jane": "68", "bob": "42", "John": "12"}'

您为通配符指定的名称实际上是一个glob,如下所示。

>>> from flask_restplus import fields, marshal
>>> import json
>>>
>>> wild = fields.Wildcard(fields.String)
>>> wildcard_fields = {'j*': wild}
>>> data = {'John': 12, 'bob': 42, 'Jane': '68'}
>>> json.dumps(marshal(data, wildcard_fields))
>>> '{"Jane": "68", "John": "12"}'

注意 在模型 之外定义通配符很重要(即,您不能像这样使用它:res_fields = {'':fields.Wildcard(fields.String)})* ,因为必须保持状态,以跟踪已处理的字段。