Débutant
🧠 Fondamentaux
10 XP
0 personnes ont réussi
ListAPIView simulee avec filtrage
Dans une application reelle, ton frontend a besoin de recuperer des listes d'objets. La page d'accueil d'un blog affiche les derniers articles. Un dashboard affiche les commandes du jour. Et souvent, l'utilisateur veut filtrer : seulement les articles de tel auteur, seulement les commandes en cours.
Dans DRF, une ListAPIView fait exactement ca. Derriere la magie, c'est juste du filtrage sur une liste. On va reproduire ce mecanisme a la main pour bien comprendre comment ca fonctionne.
Ecris une fonction list_articles(articles, filters=None) qui :
- Prend une liste de dictionnaires (les articles) et un dictionnaire de filtres optionnel - Si filters est None ou vide, retourne tous les articles - Si filters contient des paires cle/valeur, ne retourne que les articles qui matchent TOUS les filtres - Le filtre fonctionne par egalite exacte : filters={'author': 'Alice'} ne garde que les articles dont l'auteur est 'Alice' - Retourne la liste filtree sous forme de dictionnaire : {'count': nombre, 'results': liste}
articles = [{'id': 1, 'author': 'Alice'}]
r = list_articles(articles, {'author': 'Nobody'})
assert r['count'] == 0 and r['results'] == []
+ 0 tests cachés
Indices (3 disponibles)
Solution officielle
def list_articles(articles, filters=None):
if not filters:
results = articles
else:
results = [
a for a in articles
if all(a.get(k) == v for k, v in filters.items())
]
return {'count': len(results), 'results': results}