Introduction à Django
Django est un framework web Python de haut niveau qui favorise un développement rapide et une conception propre et pragmatique. Créé en 2003 dans la rédaction d'un journal, il est aujourd'hui l'un des frameworks web les plus utilisés au monde.
Philosophie
Django suit le principe "batteries included" : tout ce dont vous avez besoin est déjà inclus — ORM, authentification, interface d'administration, formulaires, système de templates, gestion des fichiers statiques...
Deux piliers fondamentaux :
- DRY (Don't Repeat Yourself) — éviter la duplication de code
- Convention over configuration — des choix sensés par défaut pour avancer vite
Architecture MVT
Django suit le pattern MVT (Model - View - Template), variante du MVC classique :
| Couche | Rôle |
|---|---|
| Model | Définit la structure des données et interagit avec la base |
| View | Contient la logique métier, traite les requêtes HTTP |
| Template | Gère l'affichage HTML |
Le routeur URL fait le lien entre une URL et la vue correspondante.
Installation
pip install django
django-admin startproject monprojet
cd monprojet
python manage.py runserver
Modèles et ORM
L'ORM Django permet d'écrire des requêtes en Python pur, sans SQL :
from django.db import models
class Article(models.Model):
titre = models.CharField(max_length=200)
contenu = models.TextField()
publie = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.titre
Après avoir défini un modèle, on génère et applique la migration :
python manage.py makemigrations
python manage.py migrate
Requêtes courantes via l'ORM :
# Tous les articles publiés, triés par date
Article.objects.filter(publie=True).order_by('-created_at')
# Un article précis (lève 404 si absent)
from django.shortcuts import get_object_or_404
article = get_object_or_404(Article, slug='mon-article')
# Créer un enregistrement
Article.objects.create(titre='Mon titre', contenu='...', publie=True)
Vues
from django.shortcuts import render, get_object_or_404
from .models import Article
def liste(request):
articles = Article.objects.filter(publie=True)
return render(request, 'blog/liste.html', {'articles': articles})
def detail(request, slug):
article = get_object_or_404(Article, slug=slug, publie=True)
return render(request, 'blog/detail.html', {'article': article})
URLs
from django.urls import path
from . import views
urlpatterns = [
path('', views.liste, name='liste'),
path('<slug:slug>/', views.detail, name='detail'),
]
Templates
Django dispose de son propre langage de templates :
{% for article in articles %}
<h2>{{ article.titre }}</h2>
<p>{{ article.contenu|truncatewords:30 }}</p>
<a href="{% url 'detail' article.slug %}">Lire la suite</a>
{% empty %}
<p>Aucun article.</p>
{% endfor %}
Filtres utiles :
- {{ texte|truncatewords:20 }} — tronquer à N mots
- {{ date|date:"d/m/Y" }} — formater une date
- {{ valeur|default:"—" }} — valeur par défaut
- {{ html|safe }} — afficher du HTML sans échappement
Interface d'administration
L'admin Django est généré automatiquement à partir des modèles :
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ('titre', 'publie', 'created_at')
list_filter = ('publie',)
search_fields = ('titre', 'contenu')
list_editable = ('publie',)
Accessible sur /admin/ après création d'un superutilisateur :
python manage.py createsuperuser
Django REST Framework
Pour exposer une API REST, on utilise DRF :
pip install djangorestframework
from rest_framework import serializers, viewsets
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__'
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.filter(publie=True)
serializer_class = ArticleSerializer
DRF fournit une interface web de navigation de l'API, la gestion de la pagination, l'authentification JWT, et bien plus.
Ce blog est construit avec Django
Ce blog utilise Django 6.0.4 avec :
- Django REST Framework pour l'API JSON
- SimpleJWT pour l'authentification par token
- PostgreSQL comme base de données
- Bootstrap 5 pour l'interface
- Templatetags personnalisés pour le rendu Markdown
73 de F4HXN