Introduction à Django

f4hxn  —  11/04/2026 à 07:56  —  informatique

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

Retour aux articles