Django Extensions
Le guide technique de référence. Commandes, configuration avancée et astuces de production.
Installation & Setup
Installation avancée, configuration `settings.py`, gestion des dépendances optionnelles (Graphviz, Werkzeug) et environnements.
Shell Plus (Avancé)
Maßtriser le REPL : SQL printing, intégration IPython/Jupyter, configuration des imports automatiques et alias.
Graph Models (ERD)
Générer des diagrammes UML/ERD de vos bases de données. Options de filtrage, héritage et formats de sortie (.dot, .png).
RunServer Plus
Le serveur de dev sous stĂ©roĂŻdes : DĂ©bogueur Werkzeug interactif, support SSL (HTTPS) local, et profiling de requĂȘtes.
Code Generators
Ne codez plus Ă la main : admin_generator, scaffold de commandes, modĂšles et formulaires automatiques.
Data Ops & Scripts
Commandes critiques : reset_db, sqldiff, runscript pour exécuter des logiques métier complexes.
Audit & Introspection
Comprendre son projet : show_urls, notes (TODOs), describe_form et validation des templates.
Jobs Scheduling
SystÚme de tùches planifiées (Cron-like) intégré. DailyJob, HourlyJob : implémentation et exécution.
Exports & Utils
Extraction de données (emails), synchronisation S3, et autres utilitaires méconnus mais puissants.
Méthodes d'Installation
Django Extensions est un paquet stable qui suit les releases de Django. Il est recommandé de l'installer uniquement dans les environnements de développement et de staging, bien que certaines commandes (comme les Jobs) puissent servir en production.
Via Pip (Standard)
Via Poetry (Recommandé)
Séparez clairement vos dépendances de développement.
Fichier requirements.txt
Si vous utilisez des fichiers séparés :
Configuration Django
L'ajout dans INSTALLED_APPS suffit pour activer les commandes, mais il faut ĂȘtre prudent sur l'environnement.
Configuration Basique
Configuration "Best Practice" (Env Dev Uniquement)
Pour éviter d'exposer des commandes dangereuses (comme reset_db) en production :
Dépendances Externes & Optionnelles
Django Extensions est modulaire. Beaucoup de commandes échoueront si les libs sous-jacentes ne sont pas là .
- Werkzeug : Obligatoire pour
runserver_plus. C'est lui qui fournit le débogueur interactif.pip install werkzeug - IPython / Jupyter : Obligatoire pour un shell coloré et l'autocomplétion avancée.
pip install ipython jupyter - PyGraphviz : Obligatoire pour
graph_models.
Requires system-level install :sudo apt-get install graphviz libgraphviz-dev(Linux) ou via Brew (Mac).
Puis :pip install pygraphviz
Pourquoi utiliser Shell Plus ?
La commande python manage.py shell native est vide. Vous devez importer manuellement vos modÚles à chaque fois. shell_plus résout cela.
Collisions de noms
Si deux apps ont un modĂšle Category, shell_plus les renommera automatiquement : App1Category et App2Category et vous avertira.
Voir le SQL en temps réel (--print-sql)
C'est l'outil pĂ©dagogique et de dĂ©bogage ultime pour comprendre l'ORM Django. Il affiche la requĂȘte SQL brute gĂ©nĂ©rĂ©e pour chaque commande Python.
Idéal pour détecter les problÚmes de N+1 queries lors de l'accÚs aux relations (ForeignKeys).
Intégration Jupyter Notebook
Transformez votre projet Django en environnement de Data Science. Cela lance un serveur Jupyter oĂč le contexte Django (modĂšles, DB) est dĂ©jĂ chargĂ©.
Le navigateur s'ouvre. Vous pouvez créer des graphiques (Matplotlib) basés sur vos données Django directement dans le notebook.
Générer un diagramme de classe
Cette commande inspecte tous vos modÚles et génÚre un fichier DOT (Graphviz). Elle peut convertir directement en PNG si les librairies sont installées.
Le résultat : Une image montrant chaque modÚle comme une boßte, avec ses champs, ses types, et des flÚches représentant les ForeignKeys et ManyToMany.
Cibler des applications
Sur un gros projet, le graphe complet est illisible ("Spaghetti diagram"). Il faut cibler.
Débogueur Interactif dans le navigateur
Remplace la page jaune d'erreur standard de Django par celle de Werkzeug.
Fonctionnalité clé
Lors d'un crash, vous voyez la stack trace. Ă droite de chaque ligne, une petite icĂŽne de console apparaĂźt. Cliquez dessus : vous avez un shell Python interactif DANS le navigateur, Ă l'endroit exact du crash.
Vous pouvez taper print(my_variable) pour inspecter l'état local.
Développement en HTTPS
Certaines APIs (Stripe, OAuth, Webhooks, GĂ©olocalisation) requiĂšrent HTTPS mĂȘme en local.
Le serveur écoute maintenant sur https://localhost:8000.
admin_generator
Ăcrire les ModelAdmin est ennuyeux. Cette commande inspecte vos modĂšles et produit un code admin complet et optimisĂ©.
Exemple de sortie générée :
Elle détecte automatiquement les dates pour date_hierarchy, les FK pour list_filter, et les champs textes pour search_fields.
runscript
Permet d'exécuter des scripts Python arbitraires dans le contexte Django sans avoir à créer une "Management Command" complÚte.
Structure
Créez un dossier scripts/ à la racine (ou dans une app) avec un __init__.py.
Exécution
sqldiff
Compare vos modÚles Django (code) avec l'état réel de la base de données. TrÚs utile pour détecter les migrations manquantes ou les modifications manuelles en DB.
â ïž Commande Destructive
Cette commande détruit tout. à utiliser uniquement en début de projet ou en CI/CD.
reset_db
Supprime la base de données (DROP DATABASE), la recrée (CREATE DATABASE) et réapplique les migrations (si configuré).
show_urls
Affiche la liste complÚte de toutes les routes URL définies dans votre projet. Indispensable pour déboguer les erreurs 404 ou les conflits de regex.
Affiche un tableau avec : URL Pattern, View Function, Name.
describe_form
GénÚre la définition d'une classe django.forms.Form à partir d'un modÚle existant. Copiez-collez le résultat pour créer vos formulaires rapidement.
notes (TODO scanner)
Scanne tout votre code source pour extraire les commentaires TODO, FIXME, XXX, HACK.
validate_templates
Vérifie la syntaxe de tous vos fichiers HTML. Détecte les balises non fermées ou les tags Django invalides avant la mise en prod.
Créer un Job
Créez un dossier jobs/ dans votre app. Créez un fichier python (ex: daily_cleanup.py).
Types disponibles : HourlyJob, DailyJob, WeeklyJob, MonthlyJob.
Lister et Lancer
Dans la Crontab systĂšme
Ajoutez simplement une ligne dans votre crontab Linux pour exécuter la commande de management.
export_emails
Exporte les adresses email, noms et prénoms de tous les utilisateurs dans différents formats (CSV, HTML, etc.).
sync_s3
Synchronise le dossier MEDIA_ROOT local vers un bucket Amazon S3 (requiert boto).
clear_cache
Vide entiÚrement le cache défini dans vos settings Django.
print_settings
Affiche la valeur d'une variable de configuration. Pratique dans les scripts CI/CD.
