Utilisation#
Démarrage rapide#
Le profil PowerShell se charge automatiquement à chaque ouverture d’un terminal. Aucune action n’est nécessaire pour l’activer.
Pour créer un nouveau projet Django complet en une seule commande :
uvdjpro mon_projet
Le projet est créé dans .\mon_projet\, les dépendances sont installées, les migrations sont appliquées et VS Code s’ouvre automatiquement.
Créer un nouveau projet — uvdjpro#
uvdjpro -project <nom_du_projet>
<nom_du_projet> doit être en snake_case. Les espaces ne sont pas acceptés.
Exemples :
uvdjpro mon_blog
uvdjpro defilepsie
uvdjpro gestion_stock
Ce que fait la commande#
En quelques minutes, uvdjpro crée un projet Django complet prêt à être développé :
Dossier du projet, environnement virtuel Python (via
uv)Toutes les dépendances installées (Django, allauth, Tailwind, HTMX, Celery, DRF…)
Settings Django organisés par environnement (
dev.py,prod.py,test.py)Application
usersavec un modèleUserpersonnalisé (avatar, bio)Application
maintenanceavec les pages d’erreur 400, 403, 404, 500Authentification complète (email, Google, Facebook) via django-allauth
Templates de login, signup, déconnexion et réinitialisation de mot de passe
Pages de maintenance et d’erreur stylisées avec animations
Configuration Tailwind CSS, AlpineJS et HTMX
Fichier
.envavec des clés secrètes générées aléatoirementDockerfile et
docker-compose.dev.yml/docker-compose.prod.ymlNginx configuré pour Cloudflare
Pipeline CI/CD GitHub Actions vers Synology
Makefile avec les commandes courantes
README complet
Une fois terminé, le terminal affiche les prochaines étapes :
1. uv run python manage.py createsuperuser
2. make tailwind ← terminal dédié
3. make dev ← autre terminal
4. Admin Django → Sites → ajouter 'mon-projet.laurentjouron.dev'
5. Renseigner .env : Google/Facebook OAuth + SMTP
Astuce
Les migrations sont exécutées automatiquement par uvdjpro. La base SQLite est prête à l’emploi dès la fin de la génération.
Personnalisations à faire après génération#
Fichier / Action |
Ce à quoi il faut penser |
|---|---|
|
Renseigner |
|
Remplacer le placeholder par le vrai logo du projet (affiché dans les pages maintenance) |
|
Remplacer |
|
Idem pour le bouton de contact |
Admin Django → Sites |
Mettre à jour le domaine (requis par allauth pour les emails de confirmation) |
Lancer le serveur de développement#
djrun
Equivalent à uv run python manage.py runserver.
Pour le développement avec rechargement automatique de Tailwind, ouvrir deux terminaux :
# Terminal 1 — compilation CSS en temps réel
make tailwind
# ou directement :
djtw
# Terminal 2 — serveur Django
djrun
Note
Sans make tailwind, les classes Tailwind dans les templates ne seront pas compilées et la mise en page de l’interface principale n’apparaîtra pas. Les pages de maintenance et d’authentification fonctionnent toutefois correctement car elles utilisent un CSS autonome.
Commandes Git#
Ces raccourcis remplacent les commandes Git les plus fréquentes.
Commande |
Description |
|---|---|
|
Affiche le statut des fichiers ( |
|
Ajoute tous les fichiers modifiés au prochain commit ( |
|
Crée un commit avec le message donné |
|
Pousse les commits vers le dépôt distant ( |
|
Affiche l’historique des commits sous forme de graphe condensé |
|
Annule le dernier commit sans supprimer les modifications (les fichiers restent modifiés) |
Exemple de workflow Git typique :
gst # Voir ce qui a changé
gaa # Tout stager
gco "Ajout de la vue liste" # Commiter
gpu # Pousser
Commandes uv#
Commande |
Description |
|---|---|
|
Active l’environnement virtuel (équivalent à |
|
Installe un paquet et met à jour |
|
Lance le serveur Django |
|
Ouvre l’interpréteur Python dans l’environnement virtuel |
Exemple :
uvadd django-import-export
uvadd "celery[redis]"
Commandes Django#
Commande |
Description |
|---|---|
|
Lance le serveur de développement Django |
|
Applique les migrations en attente ( |
|
Génère les fichiers de migration pour les modèles modifiés ( |
|
Ouvre le shell Django interactif |
|
Lance la suite de tests |
|
Crée un superutilisateur pour l’admin Django |
|
Lance la compilation Tailwind CSS en mode watch (à garder dans un terminal dédié) |
|
Supprime tous les fichiers |
Cycle de développement classique après modification d’un modèle :
djmakemig # Génère la migration
djmig # Applique la migration
djrun # Relance le serveur
Ajouter une nouvelle application — djapp_pro#
djapp_pro -name <nom_app>
Crée une application Django dans apps/<nom_app>/ avec une structure complète (vues, URLs, template de base).
Exemple :
djapp_pro -name blog
Génère :
apps/blog/
├── urls.py ← route racine "/" → vue index
├── views.py ← vue index
├── templates/
│ └── blog/
│ └── index.html
└── static/
└── blog/
Après génération, deux étapes manuelles sont nécessaires :
1. Ajouter l’app à ``config/settings/base.py`` :
LOCAL_APPS = [
"users",
"maintenance",
"blog", # ← ajouter ici
]
2. Ajouter le chemin dans ``config/urls.py`` :
path("blog/", include("blog.urls", namespace="blog")),
Ajouter un modèle — djmodel#
djmodel -app <nom_app> -model <nom_modele> [-fields <champs>]
Ajoute une classe de modèle Django dans le fichier models.py existant de l’application.
Exemple sans champs :
djmodel -app blog -model Article
Génère dans apps/blog/models.py :
class Article(models.Model):
# fields here
def __str__(self):
return f"Article({self.pk})"
Exemple avec champs :
djmodel -app blog -model Article -fields "title = models.CharField(max_length=200),body = models.TextField(),published = models.BooleanField(default=False)"
Génère :
class Article(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
published = models.BooleanField(default=False)
def __str__(self):
return f"Article({self.pk})"
Après avoir ajouté un modèle, penser à migrer :
djmakemig
djmig
Ajouter une vue — djview#
djview -app <nom_app> -view <nom_vue> [-urlPath <chemin>] [-templateName <template>]
Ajoute une vue (fonction), une entrée URL et un template HTML dans une application existante.
Exemple minimal :
djview -app blog -view ArticleList
Crée :
une fonction
articleListdansapps/blog/views.pyun path
articlelist/dansapps/blog/urls.pyun template
apps/blog/templates/blog/ArticleList.html
Exemple avec options :
djview -app blog -view ArticleList -urlPath "articles" -templateName "blog/article_list.html"
Crée :
un path
articles/dansurls.pyun template au chemin
blog/article_list.html
Note
djview génère des vues sous forme de fonctions (def). Pour des vues basées sur des classes, utiliser djview comme point de départ puis réécrire manuellement la vue générée.
Générer un CRUD complet — djcrud#
djcrud -app <nom_app> -model <nom_modele> [-fields <champs>]
Génère l’intégralité des fichiers pour gérer un modèle : liste, détail, création, modification, suppression.
Exemple :
djcrud -app blog -model Article -fields "title = models.CharField(max_length=200),body = models.TextField()"
Génère en une seule commande :
Le modèle
Articledansmodels.pyLe formulaire
ArticleFormdansforms.py5 vues dans
views.py: liste, détail, création, modification, suppression5 routes dans
urls.py4 templates : liste, détail, formulaire, confirmation de suppression
Les URLs créées sont accessibles avec le namespace de l’app :
/blog/article/ → liste de tous les articles
/blog/article/<pk>/ → détail d'un article
/blog/article/create/ → créer un article
/blog/article/<pk>/update/ → modifier un article
/blog/article/<pk>/delete/ → supprimer un article
Après génération, penser à migrer si des champs ont été ajoutés :
djmakemig
djmig
Créer une API REST — djapi#
djapi -name <nom_app>
Crée une application Django REST Framework avec la structure de base (serializer, viewset, router).
Exemple :
djapi -name api_v1
Génère dans apps/api_v1/ :
serializers.py—ExampleSerializerviews.py—ExampleViewSeturls.py—DefaultRouteravec l’endpoint/examples/
Les fichiers utilisent Example comme modèle placeholder. Après génération :
Remplacer
Examplepar le vrai modèleAjouter l’app à
LOCAL_APPSDéclarer le chemin dans
config/urls.py
Exemple d’utilisation typique :
djapi -name api_v1
djmodel -app api_v1 -model Article -fields "title = models.CharField(max_length=200)"
# Puis éditer api_v1/serializers.py et api_v1/views.py pour remplacer Example par Article
djmakemig
djmig
Supprimer les fichiers compilés — djclean#
djclean
Supprime récursivement tous les dossiers __pycache__ et fichiers .pyc dans le projet courant. Utile avant un commit, un déploiement ou pour résoudre des problèmes d’import.
Commandes Makefile#
Le Makefile généré par uvdjpro regroupe les opérations courantes :
Commande |
Description |
|---|---|
|
Lance le serveur Django (identique à |
|
Lance le watcher Tailwind CSS (identique à |
|
Applique les migrations |
|
Génère les migrations |
|
Crée un superutilisateur |
|
Collecte les fichiers statiques (pour la prod) |
|
Lance les tests |
|
Ouvre le shell Django |
|
Lance Docker Compose en mode développement |
|
Lance Docker Compose en mode production |
Déploiement#
Déploiement en production via Docker#
Le déploiement se fait via GitHub Actions au push sur la branche main. Le pipeline :
Build l’image Docker
Push vers GitHub Container Registry (
ghcr.io/laurentjouron/<projet>:latest)Se connecte en SSH au NAS Synology
Exécute
docker compose pull && docker compose up -d
Pour le premier déploiement manuel :
# Sur le NAS Synology
mkdir -p /volume1/docker/<projet_kebab>
cd /volume1/docker/<projet_kebab>
# Copier docker-compose.prod.yml et .env
docker compose up -d
Variables d’environnement pour la production#
Compléter le fichier .env avant le premier déploiement :
# Authentification sociale
GOOGLE_CLIENT_ID=<depuis console.cloud.google.com>
GOOGLE_CLIENT_SECRET=<depuis console.cloud.google.com>
FACEBOOK_APP_ID=<depuis developers.facebook.com>
FACEBOOK_APP_SECRET=<depuis developers.facebook.com>
# Email (exemple Mailgun)
EMAIL_HOST_USER=postmaster@mg.mondomaine.com
EMAIL_HOST_PASSWORD=<clé API Mailgun>
Workflow complet — exemple de projet#
Voici un exemple de création d’un blog de bout en bout :
# 1. Créer le projet
uvdjpro mon_blog
# 2. Ouvrir un terminal Tailwind (garder ouvert)
djtw
# 3. Créer l'app blog
djapp_pro -name blog
# 4. Ajouter 'blog' à LOCAL_APPS dans config/settings/base.py
# Ajouter path("blog/", include("blog.urls", namespace="blog")) dans config/urls.py
# 5. Générer le CRUD Article
djcrud -app blog -model Article -fields "title = models.CharField(max_length=200),body = models.TextField(),author = models.ForeignKey('users.User' on_delete=models.CASCADE),created_at = models.DateTimeField(auto_now_add=True)"
# 6. Migrer
djmakemig
djmig
# 7. Créer le superuser
djadmin
# 8. Lancer le serveur
djrun
# → http://127.0.0.1:8000/blog/article/ est accessible
Résolution des problèmes courants#
Problème |
Solution |
|---|---|
|
Vérifier que |
|
Vérifier que |
Les styles Tailwind n’apparaissent pas |
Lancer |
|
Ne pas appeler |
|
Lancer |
|
Se placer à la racine du projet (là où se trouve |
Les pages allauth n’ont pas de style |
Vérifier que |