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...).