🔥 1. Intégration dans ton programme vidéo (Section dédiée)¶
Je t’ajoute un Module 8 dans le programme initial.
Module 8 — Le Super-Power Maison : Ta BaseViewSet¶
🎬 Épisode 8.1 — Pourquoi une BaseViewSet ?¶
Objectif : expliquer le problème : DRF est puissant, mais écrire 20 fois les mêmes options devient vite… un sport d’endurance inutile. Sous-sujets :
Répétition dans les ViewSets standards (filterset_class, ordering, permission, lookup, search…)
Problème de configuration “rigide” si tu fais tout dans
settings.pyTon besoin : une logique DRY, modulaire et réutilisable pour TOUS tes projets
Démo :
Une ViewSet DRF “normale” (longue et répétitive)
La version avec ta BaseViewSet : 80% plus courte
Réaction corporate & professionnelle : un sourire satisfait et un “Voilà.”
Livrable :
core.viewsets.BaseViewSet+ README
🎬 Épisode 8.2 — Architecture interne : ton Swiss Army Knife DRF¶
Objectif : décortiquer les modules internes de ta BaseViewSet.
Fonctionnalités présentées :
🔍 Recherche intégrée
🧮 Filtres automatiques via FilterSet
🧾 Options de modèle pour la génération auto des formulaires
🔗 Gestion dynamique des URLs (lookup, actions custom)
📦 Gestion automatique du serializer (list/retrieve/create/update/support)
📤 Export CSV / XLSX sur n’importe quel queryset
📑 Pagination modulaire (sans passer par settings.py)
🔐 Permissions simplifiées
⚙️ Hooks pour override par ViewSet (pré/post processing)
Démo :
Tu passes sur chaque bloc, tu montres un snippet court & propre.
Tu fais tourner une API “sans rien écrire” (juste un Model + un ViewSet).
Livrable :
Documentation technique interne “How to extend BaseViewSet”.
🎬 Épisode 8.3 — Le système de pagination modulaire¶
Objectif : montrer ta solution anti-rigidité DRF.
Sous-sujets :
Comment DRF limite la pagination si tout est défini dans les settings
Pourquoi une pagination par ViewSet est de la bombe
Variantes : class-based pagination, page-size dynamique, offset-limit, paginator custom
Démo :
Switch de pagination simplement dans le ViewSet :
class ProductViewSet(BaseViewSet): pagination_class = SmallPagination
API responses avant / après.
Livrable :
Un dossier
pagination/avec plusieurs classes réutilisables.
🎬 Épisode 8.4 — Export CSV / Excel : le bouton magique des clients¶
Objectif : montrer qu’en 2025, personne ne sait vivre sans Excel. Sous-sujets :
Export générique à partir du queryset
Sélection des champs automatiquement
Export custom via override
Gestion des colonnes calculées
Démo :
GET /api/products/export/?format=csvTéléchargement direct → Excel → Ça marche → Clap de fin
Livrable :
exporters/csv.py&exporters/xlsx.py
🎬 Épisode 8.5 — Le “Case Study” final : créer 3 API en 5 minutes¶
Objectif : démontrer la puissance du système.
Tu montres :
Un modèle simple (Product)
Un modèle relationnel (Order + items)
Un modèle complexe (User > Profile)
Tu ajoutes :
class ProductViewSet(BaseViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
Et… tout marche :
pagination
recherche
filtres
export
CRUD
actions custom
pagination différente selon la vue
💥 Moment YouTube “wow” professionnel.
🔥 3. Structure idéale de ta BaseViewSet¶
Tu pourras montrer ce découpage propre en vidéo :
core/
├── viewsets/
│ └── base.py
├── filters/
│ ├── search.py
│ └── ordering.py
├── pagination/
│ ├── small.py
│ ├── default.py
│ └── large.py
├── exporters/
│ ├── csv.py
│ └── xlsx.py
├── utils/
│ ├── model_options.py
│ └── url_builder.py
Et dans base.py :
class BaseViewSet(
GenericViewSet,
ListModelMixin,
RetrieveModelMixin,
CreateModelMixin,
UpdateModelMixin,
DestroyModelMixin,
):
filterset_class = None
search_fields = ()
ordering_fields = ()
export_fields = None
pagination_class = DefaultPagination
serializer_class = None
# get_queryset()
# get_serializer_class()
# get_export_data()
# generate_csv()
# generate_xlsx()
# list()
# retrieve()
# export()
# etc.
Ce squelette te donne de quoi présenter proprement “les modules internes”.
🔥 Si tu veux maintenant…¶
Je peux te fournir au choix :
✅ 1. Le script complet de l’épisode 8.1 (prêt à enregistrer)¶
✅ 2. La version entièrement générée de ta BaseViewSet (code complet, modulaire, propre)¶
✅ 3. Un README “officiel” pour documenter ta BaseViewSet¶
✅ 4. La roadmap d’amélioration future (v2, v3, plugin system)¶
Dis-moi lequel tu veux et je te le génère immédiatement.
🔥 2. Comment présenter ta BaseViewSet : ton discours YouTube “second degré corporate”¶
Voici ton texte, prêt pour la caméra :
**“Alors… dans Django, j’aime beaucoup le principe du DRY — Don’t Repeat Yourself — mais DRF, parfois, lui il dit ‘Repeat Yourself. Beaucoup. Encore.’
Moi j’ai dit non.
J’ai donc créé une classe BaseViewSet tellement modulable que même mes futurs projets que je n’ai pas encore imaginés sont déjà contents d’être maintenables.
Cette classe, c’est un peu comme un chef d’orchestre :
elle configure les filtres,
dirige la recherche,
distribue les serializers,
génère les exports CSV et Excel,
s’occupe de la pagination comme une secrétaire efficace,
et en plus elle gère les options du modèle comme si Django m’aimait.
Bref : c’est une VueSet mais sous stéroïdes, entièrement configurable.
Tu veux une pagination différente ? Un export ? Une action admin ? Tu mets une ligne dans ton ViewSet. Et Django te répond : ‘Ok chef, j’exécute.’
Corporate, propre, maintenable, réutilisable. Mais avec une larme de second degré pour rester vivant.”**