Aller au contenu principal

3 formations sont désormais disponibles : Python, Flask et JS.

Aller au contenu principal

Sérialisation (Marshmallow)

Apprendre Flask : Le Guide Ultime
3 min de lecture
Gratuit

Un objet Python (User(id=1, name='Bob')), ça ne s'envoie pas tel quel sur internet. Il faut le transformer en texte JSON : {"id": 1, "name": "Bob"}. C'est la Sérialisation.

Et quand on reçoit du JSON et qu'on veut en faire un objet Python, c'est la Désérialisation.

Au lieu de le faire à la main (mon_dict = {'id': user.id...}), on utilise une librairie pro : Marshmallow.

Installation

pip install flask-marshmallow marshmallow-sqlalchemy

Configuration

from flask_marshmallow import Marshmallow

ma = Marshmallow(app)

Créer un Schéma

Un Schéma définit comment transformer ton Modèle SQLAlchemy en JSON.

class UserSchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = User # Ton modèle SQLAlchemy
        load_instance = True # Pour pouvoir désérialiser directement en objet User

# Instanciation
user_schema = UserSchema()
users_schema = UserSchema(many=True) # Pour une liste d'users

Utilisation

@app.route('/api/users')
def get_users():
    users = User.query.all()
    # On transforme la liste d'objets en JSON
    result = users_schema.dump(users)
    return jsonify(result)

@app.route('/api/users/<int:id>')
def get_user(id):
    user = User.query.get_or_404(id)
    return user_schema.dump(user) # Renvoie automatiquement du JSON

C'est propre, et Marshmallow gère aussi la Validation des données entrantes (types, champs obligatoires...).