Как обернуть ответ REST API объектом-оболочкой в Python Flask

#python #json #flask #flask-restful #marshmallow

#python #json #flask #flask-restful #marshmallow

Вопрос:

При создании REST API с помощью flask-restful я получаю нежелательный массив 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
  

Комментарии:

1. .dump(user, many=False) ?

2. @KlausD Нет.. Это не работает.. Все еще возвращает то же самое

Ответ №1:

Это сделало свое дело

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

Комментарии:

1. Да. Это меняется в marshmallow 3, где возвращаются только данные. marshmallow 3 все еще находится в состоянии RC, но если вы начинаете новый проект, я бы рекомендовал использовать его.