Exercices Django Avancé CRUD complet en mémoire
🎉

Bravo!

Débutant 🧠 Fondamentaux 10 XP 0 personnes ont réussi

CRUD complet en mémoire

Que tu construises un back-office, une appli mobile ou un SaaS, tu fais toujours la meme chose avec tes donnees : tu les crees, tu les lis, tu les modifies, tu les supprimes. C'est le CRUD (Create, Read, Update, Delete), et c'est le coeur de toute API REST.

Dans DRF, un ModelViewSet genere tout ca automatiquement. Mais pour bien comprendre ce qui se passe sous le capot, on va le construire a la main. C'est une classe qui stocke des donnees et expose des methodes pour les manipuler.

Tu vas creer une classe ArticleCRUD qui stocke ses articles dans un dictionnaire interne (self.db) ou les cles sont les ids. Elle doit avoir :

create(data) : ajoute un article avec un id auto-incremente (1, puis 2, etc.). Ajoute la clé 'id' aux données et retourne l'article cree.

read(article_id) : retourne l'article ou None s'il n'existe pas.

read_all() : retourne la liste de tous les articles.

update(article_id, data) : met a jour les champs d'un article existant et retourne l'article modifie. Retourne None si l'article n'existe pas. L'id ne doit pas changer.

delete(article_id) : supprime un article et retourne True. Retourne False si l'article n'existait pas.

Exemple :

crud = ArticleCRUD()
crud.create({'title': 'Hello', 'content': 'World'})
renvoie {'id': 1, 'title': 'Hello', 'content': 'World'}

crud.read(1)
renvoie {'id': 1, 'title': 'Hello', 'content': 'World'}

Tests (4/5)

Create retourne article avec id
crud = ArticleCRUD()
a = crud.create({'title': 'Hello'})
assert a['id'] == 1 and a['title'] == 'Hello'
Read existant et inexistant
crud = ArticleCRUD()
crud.create({'title': 'Test'})
assert crud.read(1)['title'] == 'Test'
assert crud.read(999) is None
Update modifie les champs
crud = ArticleCRUD()
crud.create({'title': 'Old', 'content': 'Before'})
r = crud.update(1, {'title': 'New'})
assert r['title'] == 'New' and r['id'] == 1
Delete existant et inexistant
crud = ArticleCRUD()
crud.create({'title': 'Bye'})
assert crud.delete(1) == True
assert crud.delete(1) == False
assert crud.read_all() == []

+ 0 tests cachés

Indices (3 disponibles)

solution.py