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

Flask中使用Flask-RESTPlus Swagger定义数组结构API模型

在Flask-RESTPlus中定义数组结构的POST请求模型

没问题,我来帮你搞定这个Flask-RESTPlus里的数组请求体模型定义。咱们可以通过**嵌套模型(Nested Model)结合列表字段(List Field)**来实现你要的结构,具体步骤如下:

1. 导入必要的模块

首先确保你已经导入了Flask-RESTPlus的核心组件:

from flask import Flask
from flask_restplus import Api, Resource, fields

2. 定义子模型(Product的结构)

因为你的product字段是一个数组,每个元素都有固定的结构,所以先定义单个产品的子模型:

app = Flask(__name__)
api = Api(app, version='1.0', title='订单API', description='处理订单提交的API')

# 定义单个产品的模型
product_model = api.model('Product', {
    'product_id': fields.Integer(required=True, description='产品ID'),
    'total_price': fields.Float(required=True, description='该产品的总价'),
    'quantity': fields.Integer(required=True, description='产品数量')
})

这里我给每个字段加上了required=True和描述,你可以根据实际需求调整是否必填。

3. 定义父模型(包含user_id和product数组)

接下来定义包含user_id和product数组的顶层模型,用fields.List(fields.Nested(product_model))来表示数组结构:

# 定义订单请求体的顶层模型
order_request_model = api.model('OrderRequest', {
    'user_id': fields.Integer(required=True, description='用户ID'),
    'product': fields.List(fields.Nested(product_model), required=True, description='产品列表')
})

这里的fields.List用来指定这是一个数组类型,里面的元素就是咱们刚才定义的product_model。

4. 在POST接口中使用这个模型

最后,在你的POST接口里通过@api.expect(order_request_model)来绑定请求体模型,这样Swagger文档就会自动生成对应的请求体格式了:

@api.route('/submit-order')
class OrderSubmit(Resource):
    @api.expect(order_request_model, validate=True)
    @api.response(201, '订单提交成功')
    def post(self):
        # 获取请求体数据
        data = api.payload
        # 这里可以写你的数据库操作逻辑,比如保存user_id和产品列表到数据库
        user_id = data['user_id']
        products = data['product']
        
        # 示例返回
        return {
            'message': '订单提交成功',
            'user_id': user_id,
            'products': products
        }, 201

if __name__ == '__main__':
    app.run(debug=True)

这里的validate=True会自动帮你验证请求体的格式是否符合模型定义,不符合的话会返回400错误,非常实用。

效果说明

启动你的Flask应用后,访问Swagger文档页面(默认是http://localhost:5000/swagger),你会看到/submit-order的POST接口里,请求体的格式完全符合你给出的结构:

{ "user_id" : 3, "product" : [ { "product_id" : 33, "total_price" : 50, "quantity": 2 }, { "product_id" : 18, "total_price" : 40, "quantity": 2 } ] }

而且Swagger还会提供交互式的测试功能,你可以直接在页面上提交符合格式的数据进行测试。

内容的提问来源于stack exchange,提问作者Lama Madan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:02:12