【问题标题】:How to wrap REST API response with Wrapper object in Python Flask如何在 Python Flask 中使用 Wrapper 对象包装 REST API 响应
【发布时间】:2019-03-22 11:25:37
【问题描述】:

在使用 flask-restful 构建 REST API 时,我的响应中出现了不需要的 json 数组

{
    "data": [
        {
            "email": "sam@test.com",
            "id": null,
            "name": "Sam"
        },
        {}
    ]
}

我想要的是

{
    "data": {
         "email": "sam@test.com",
         "id": null,
         "name": "Sam"
    }
}

这是我的代码

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(100), nullable=False, unique=True)
    password = db.Column(db.String(100), nullable=False)


class UserSchema(ma.ModelSchema):
    class Meta:
        model = User
        fields = ('id', 'name', 'email')
        ordered = True


class AuthResource(Resource):
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('name', type=str, required=True, help='name required')
        parser.add_argument('email', type=str, required=True, help='email required')
        parser.add_argument('password', type=str, required=True, help='password required')
        args = parser.parse_args()

        try:
            user = User(**args)
            db.session.add(user)
            db.session.commit()
            return {'data': UserSchema().dump(user)}, 201
        except IntegrityError:
            return {'message': 'Account already exists'}, 400

【问题讨论】:

  • .dump(user, many=False)?
  • @KlausD Nope.. 它不起作用.. 仍然返回相同

标签: python json flask flask-restful marshmallow


【解决方案1】:

这成功了

return {'data': UserSchema().dump(user).data}, 201

【讨论】:

  • 是的。这在 marshmallow 3 中发生了变化,其中仅返回数据。 marshmallow 3 仍处于 RC 状态,但如果您要开始一个新项目,我建议您使用它。
猜你喜欢
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 2018-11-25
相关资源
最近更新 更多