Ce projet est un blog simple développé avec Django, créé dans le but d'apprendre et de comprendre les concepts fondamentaux du framework Django.
Ce projet couvre les concepts essentiels suivants :
- Models : Création d'un modèle
BlogPostavec différents types de champs - Views : Utilisation de vues génériques basées sur les classes (CBV)
- Templates : Système de templates avec héritage et inclusion
- Création d'un modèle avec différents types de champs (CharField, TextField, BooleanField, DateField, etc.)
- Relations entre modèles (ForeignKey avec le modèle User)
- Génération automatique de slug à partir du titre
- Méthodes personnalisées (
__str__,save, propriétés) - Configuration avec SQLite (possibilité de basculer vers PostgreSQL)
ListView: Afficher la liste des articlesDetailView: Afficher un article en détailCreateView: Créer un nouvel articleUpdateView: Modifier un article existantDeleteView: Supprimer un article
- Restriction d'accès aux vues avec
@login_required - Affichage conditionnel dans les templates selon l'authentification
- Filtrage des articles publiés pour les utilisateurs non authentifiés
- Configuration des URLs au niveau du projet et de l'application
- Utilisation de
app_namepour les espaces de noms - URLs dynamiques avec paramètres (slug)
- Fonction
reverse_lazypour les redirections
- Configuration personnalisée de l'admin avec
ModelAdmin list_display: Colonnes affichées dans la listelist_editable: Modification rapide depuis la liste
- Template de base (
base.html) avec blocs réutilisables - Héritage de templates avec
{% extends %} - Utilisation de
{% block %}pour les sections personnalisables - Fichiers statiques (CSS) avec
{% static %} - Tags de template (
{% url %},{% if %}, etc.)
- Integration de
django-livereloadpour le rechargement automatique en développement - Organisation du projet avec une structure claire
- Gestion des fichiers statiques
django_blog/
├── .env/ # Environnement virtuel Python
├── src/ # Code source du projet
│ ├── blog/ # Configuration du projet Django
│ │ ├── settings.py # Paramètres du projet
│ │ ├── urls.py # URLs principales
│ │ └── wsgi.py # Configuration WSGI
│ ├── posts/ # Application "posts"
│ │ ├── migrations/ # Migrations de base de données
│ │ ├── templates/posts/ # Templates de l'application
│ │ │ ├── blogpost_list.html
│ │ │ ├── blogpost_detail.html
│ │ │ ├── blogpost_create.html
│ │ │ ├── blogpost_edit.html
│ │ │ └── blogpost_confirm_delete.html
│ │ ├── static/ # Fichiers statiques (CSS, JS, images)
│ │ ├── models.py # Modèle BlogPost
│ │ ├── views.py # Vues de l'application
│ │ ├── urls.py # URLs de l'application
│ │ └── admin.py # Configuration de l'admin
│ ├── templates/ # Templates globaux
│ │ └── base.html # Template de base
│ ├── manage.py # Script de gestion Django
│ └── db.sqlite3 # Base de données SQLite
- Python 3.x
- pip
-
Activer l'environnement virtuel (si ce n'est pas déjà fait) :
.\.env\Scripts\Activate.ps1
-
Installer les dépendances :
pip install django django-livereload-server
-
Appliquer les migrations :
python src\manage.py migrate
-
Créer un superutilisateur (pour accéder à l'admin) :
python src\manage.py createsuperuser
-
Lancer le serveur de développement :
python src\manage.py runserver
- Page d'accueil : http://localhost:8000/blog/
- Interface d'administration : http://localhost:8000/admin/
- Créer un article : http://localhost:8000/blog/create/ (nécessite d'être connecté)
- ✅ Afficher la liste des articles publiés
- ✅ Voir le détail d'un article
- ✅ Créer un nouvel article (utilisateur connecté uniquement)
- ✅ Modifier un article existant
- ✅ Supprimer un article
- ✅ Publier/dépublier un article depuis l'admin
- ✅ Génération automatique du slug depuis le titre
- ✅ Filtrage des articles non publiés pour les visiteurs
title: Titre de l'article (CharField, unique)slug: Slug généré automatiquement (SlugField, unique)author: Auteur de l'article (ForeignKey vers User)content: Contenu de l'article (TextField)published: Statut de publication (BooleanField)created_on: Date de création (DateField)last_updated: Date de dernière modification (DateTimeField, auto)
- Les utilisateurs non authentifiés ne voient que les articles publiés
- Les utilisateurs authentifiés voient tous les articles
- La création d'articles nécessite une authentification
- L'interface d'administration nécessite un compte superutilisateur
Ce projet m'a permis de comprendre :
- Comment structurer un projet Django
- L'utilisation de l'ORM Django pour interagir avec la base de données
- Les vues génériques et leur puissance pour réduire le code
- Le système de templates et l'héritage
- La gestion de l'authentification et des permissions
- L'interface d'administration Django et sa personnalisation
- Le routing des URLs
- L'organisation du code en applications réutilisables
- Django 5.2.8 : Framework web Python
- SQLite : Base de données (possibilité de passer à PostgreSQL)
- django-livereload : Rechargement automatique en développement
- Python 3.x : Langage de programmation
- La
SECRET_KEYet les credentials sont exposés dans ce projet car il s'agit d'un projet d'apprentissage local - En production, il faudrait :
- Utiliser des variables d'environnement pour les secrets
- Mettre
DEBUG = False - Configurer
ALLOWED_HOSTS - Utiliser une base de données plus robuste (PostgreSQL)
- Configurer les fichiers statiques avec un serveur web (nginx/Apache)
Projet créé à des fins d'apprentissage de Django 🎯