Débutant
🧠 Fondamentaux
10 XP
0 personnes ont réussi
Serializer basique
Quand tu construis une API pour une startup ou un projet perso, la premiere question qui se pose c'est : comment je fais passer mes données Python en JSON pour le frontend, et comment je recupere le JSON du frontend pour en faire du Python ? C'est le boulot du serializer.
Pense au serializer comme un traducteur bilingue. Il sait parler Python et JSON, et il traduit dans les deux sens. En plus de traduire, il filtre : il ne laisse passer que les champs que tu as autorises. Ca evite de balancer accidentellement un mot de passe ou un token secret dans ta reponse API.
Voici le principe de base :
class BookSerializer: fields = ['title', 'author', 'pages']
def serialize(self, data): return {f: data[f] for f in self.fields if f in data}
Tu vas creer une classe ArticleSerializer avec les champs 'title', 'content' et 'author'. Elle doit avoir deux methodes :
serialize(data) prend un dictionnaire Python et retourne un nouveau dictionnaire ne contenant que les champs declares dans fields.
deserialize(json_data) prend un dictionnaire (simulant du JSON recu) et verifie que tous les champs obligatoires sont presents. Si un champ manque, elle retourne un dictionnaire avec 'errors' qui liste les champs manquants. Si tout est bon, elle retourne un dictionnaire avec 'data' contenant les donnees validees.
s = ArticleSerializer()
r = s.serialize({'title': 'Test', 'content': 'Texte', 'author': 'Alice', 'secret': '123'})
assert r == {'title': 'Test', 'content': 'Texte', 'author': 'Alice'}
assert 'secret' not in r
Serialise avec champs partiels
s = ArticleSerializer()
r = s.serialize({'title': 'Test'})
assert r == {'title': 'Test'}
Deserialise valide
s = ArticleSerializer()
r = s.deserialize({'title': 'Hello', 'content': 'World', 'author': 'Bob'})
assert 'data' in r
assert r['data']['title'] == 'Hello'
Deserialise invalide
s = ArticleSerializer()
r = s.deserialize({'title': 'Hello'})
assert 'errors' in r
assert 'content' in r['errors'] and 'author' in r['errors']
+ 0 tests cachés
Indices (3 disponibles)
Solution officielle
class ArticleSerializer:
fields = ['title', 'content', 'author']
def serialize(self, data):
return {f: data[f] for f in self.fields if f in data}
def deserialize(self, json_data):
missing = [f for f in self.fields if f not in json_data]
if missing:
return {'errors': missing}
return {'data': {f: json_data[f] for f in self.fields}}