You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask Restx中如何创建字典类型api.model?求解决方案

Flask Restx 实现字典类型API模型

需求回顾

你需要API返回以设备主机名为键、设备信息字典为值的结构,且不想使用List类型。目标返回格式如下:

{
    "sandbox-iosxe-recomm-1.cisco.com": {
        "username": "developer", 
        "password": "cisco", 
        "protocol": "ssh",
        "port": 22,
        "os_type": "iosxe"
    },
    "sandbox-iosxr-1.cisco.com": {
        "username": "admin", 
        "password": "cisco", 
        "protocol": "ssh",
        "port": 22,
        "os_type": "iosxr"
    }
}

解决步骤

1. 定义单个设备的详细模型

先把单台设备的字段封装成一个嵌套模型:

device_detail_model = api.model('DeviceDetail', {
    'username': fields.String(required=True, description='用户名', default='device username'),
    'password': fields.String(required=True, description='密码', default='device password'),
    'protocol': fields.String(required=True, description='协议', default='protocol name'),
    'port': fields.Integer(required=True, description='端口', default=22),
    'os_type': fields.String(required=True, description='操作系统类型', default='device OS type'),
})

2. 创建支持动态键的字典模型

用fields.Dict来实现任意字符串作为键,值对应上面的设备详细模型:

devices_model = api.model('Devices', {
    '*': fields.Nested(device_detail_model, description='设备主机名作为键,对应设备信息')
})

这里的'*'代表允许任意字符串作为键,每个键对应的值都要符合device_detail_model的结构。

3. 在接口中使用模型

在路由里返回符合结构的数据,并通过marshal_with指定模型:

@api.route('/devices')
class Devices(Resource):
    @api.marshal_with(devices_model)
    def get(self):
        return {
            "sandbox-iosxe-recomm-1.cisco.com": {
                "username": "developer", 
                "password": "cisco", 
                "protocol": "ssh",
                "port": 22,
                "os_type": "iosxe"
            },
            "sandbox-iosxr-1.cisco.com": {
                "username": "admin", 
                "password": "cisco", 
                "protocol": "ssh",
                "port": 22,
                "os_type": "iosxr"
            }
        }

原写法问题分析

你之前的模型用了固定键'device',只能生成单条设备的结构,没法支持动态主机名作为键。而fields.Dict配合嵌套模型正好解决了动态键的需求,完全匹配你想要的返回格式。

内容的提问来源于stack exchange,提问作者Muhammad Rafi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:15:32