Django : le framework web Python
Tour d'horizon de Django : ORM, admin automatique, templates, routage, sécurité — le framework batteries included qui fait tourner ce site.
Django est un framework web Python open source, créé en 2003 par des journalistes du Lawrence Journal-World et publié en 2005. Son slogan — "The web framework for perfectionists with deadlines" — résume bien sa philosophie : aller vite sans sacrifier la qualité. Ce site tourne sous Django.
Le principe batteries included
Django fournit tout ce dont on a besoin pour construire une application web :
- ORM — mapping objet-relationnel pour interagir avec la base de données en Python pur
- Interface d'administration — générée automatiquement à partir des modèles
- Système d'authentification — utilisateurs, groupes, permissions, sessions
- Moteur de templates — rendu HTML côté serveur avec héritage de gabarits
- Formulaires — validation, nettoyage et rendu des données
- Routage d'URLs — mapping propre entre URLs et vues
- Système de migrations — versionnement du schéma de base de données
Les modèles et l'ORM
Le coeur de Django repose sur les modèles. Un modèle Python devient une table en base de données :
from django.db import models
class Article(models.Model):
titre = models.CharField(max_length=200)
contenu = models.TextField()
publie = models.BooleanField(default=True)
date = models.DateTimeField(auto_now_add=True)
Django génère et applique automatiquement les migrations :
python manage.py makemigrations
python manage.py migrate
L'admin automatique
En deux lignes, Django génère une interface d'administration complète :
from django.contrib import admin
from .models import Article
admin.site.register(Article)
Les vues et le routage
Une vue reçoit une requête HTTP et retourne une réponse :
from django.shortcuts import render
from .models import Article
def liste(request):
articles = Article.objects.filter(publie=True)
return render(request, 'articles/liste.html', {'articles': articles})
Le routage dans urls.py :
urlpatterns = [
path('articles/', views.liste, name='liste'),
path('articles/<slug:slug>/', views.detail, name='detail'),
]
Le système de templates
Django utilise un moteur de templates avec héritage de gabarits :
{% verbatim %}{% extends base.html %}
{% block content %}
{% for article in articles %}
<p>{{ article.titre }}</p>
{% endfor %}
{% endblock %}{% endverbatim %}
Sécurité par défaut
Django protège contre les attaques courantes sans configuration supplémentaire :
- CSRF — jeton automatique sur tous les formulaires
- XSS — échappement automatique des variables dans les templates
- Injection SQL — requêtes paramétrées via l'ORM
- Clickjacking — headers X-Frame-Options activés
Pourquoi choisir Django
Django est adapté aux projets qui ont besoin de beaucoup de fonctionnalités rapidement — back-office, sites de contenu, APIs, plateformes avec authentification. Sa documentation est parmi les meilleures de l'écosystème Python.
La version actuelle est Django 5.x, disponible sur djangoproject.com.