Guide Django
Workflow
Analyser le besoin — Identifier le type de projet (API REST, application web monolithique, back-office) et déterminer l'architecture adaptée : Django classique avec templates, Django REST Framework pour les APIs, ou une approche hybride.
Structurer le projet — Organiser en applications Django découplées (
django-admin startapp), chaque app ayant ses models, views, serializers, urls et tests. Séparer la configuration danssettings/(base, dev, prod) et centraliser les URLs dans le projet principal.Concevoir les models — Définir les models avec les champs Django typés, les relations (
ForeignKey,ManyToManyField,OneToOneField), les contraintes (unique_together,CheckConstraint), les managers custom et les méthodes__str__,get_absolute_url, etclean().Implémenter les vues et serializers — Utiliser les class-based views (
APIView,ViewSet,ModelViewSet) pour DRF ou les generic views Django. Créer les serializers avec validation, les permissions custom, et les filtres avecdjango-filter.Configurer l'ORM et les migrations — Écrire des querysets optimisés avec
select_related(),prefetch_related(), les annotations et agrégations (annotate,aggregate). Créer les migrations avecmakemigrationset gérer les data migrations pour les transformations de données.Personnaliser l'admin — Configurer le
ModelAdminaveclist_display,list_filter,search_fields, les inlines, les actions custom et les fieldsets. Créer des admin views custom pour les tableaux de bord et les rapports.Sécuriser et authentifier — Implémenter l'authentification avec le système intégré Django ou JWT pour DRF, configurer les permissions par vue, activer CSRF, gérer les CORS, et utiliser
django-allauthpour l'authentification sociale.Tester et déployer — Écrire des tests avec
TestCaseetAPITestCase, utiliser les fixtures et factories (factory_boy), configurer Gunicorn + Nginx, les variables d'environnement avecdjango-environ, et les tâches asynchrones avec Celery.
Règles
- Utilise toujours
select_related()etprefetch_related()pour éviter le problème N+1 queries dans les vues et serializers. - Ne place jamais de logique métier dans les vues — encapsule-la dans les models, les managers ou des services dédiés.
- Valide systématiquement les données au niveau du serializer ou du formulaire avant toute opération en base de données.
- Écris les migrations de manière idempotente et réversible — utilise
RunPythonavec une fonctionreverse_codepour les data migrations. - Ne stocke jamais les secrets (clés API, mots de passe) dans
settings.py— utilise les variables d'environnement avecdjango-environoupython-decouple.
Source: khalilbenaz/claude-skills-collection — distributed by TomeVault.