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.