Vue d'ensemble

Django 1.0, publié le 3 septembre 2008, est la première version stable du framework web Python le plus populaire. Après plusieurs années de développement et d'utilisation en production (notamment par le journal Lawrence Journal-World où Django est né), cette version marque la maturité du projet et la stabilité de son API.

Django se distingue dès le départ par sa philosophie "batteries included" : un ORM puissant, une interface d'administration automatique, un moteur de templates, un routage d'URL élégant et un écosystème cohérent qui permet de construire rapidement des applications web complètes.

Fonctionnalités principales

L'ORM Django

L'ORM de Django permet de définir les modèles de données en Python et de les manipuler sans écrire de SQL. Les requêtes sont chaînables, paresseuses et expressives.

python
from django.db import models

class Auteur(models.Model):
    nom = models.CharField(max_length=100)
    email = models.EmailField(unique=True)
    date_inscription = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.nom

class Article(models.Model):
    titre = models.CharField(max_length=200)
    contenu = models.TextField()
    auteur = models.ForeignKey(Auteur, on_delete=models.CASCADE)
    publie = models.BooleanField(default=False)
    date_creation = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['-date_creation']

# Requêtes chaînées et expressives
articles_recents = (
    Article.objects
    .filter(publie=True)
    .select_related('auteur')
    .order_by('-date_creation')[:5]
)

L'interface d'administration

L'admin Django génère automatiquement une interface web complète pour gérer les données. Quelques lignes suffisent pour obtenir un back-office fonctionnel avec recherche, filtres et édition.

python
from django.contrib import admin

class ArticleAdmin(admin.ModelAdmin):
    list_display = ['titre', 'auteur', 'publie', 'date_creation']
    list_filter = ['publie', 'date_creation']
    search_fields = ['titre', 'contenu']
    date_hierarchy = 'date_creation'

admin.site.register(Article, ArticleAdmin)

Templates et routage d'URL

Le moteur de templates Django sépare la logique de présentation du code Python. Le système d'URL permet de définir des routes élégantes et lisibles.

python
# urls.py
from django.conf.urls import patterns, url

urlpatterns = patterns('',
    url(r'^articles/$', 'blog.views.liste_articles'),
    url(r'^articles/(?P<article_id>\d+)/$', 'blog.views.detail_article'),
)

# views.py
from django.shortcuts import render, get_object_or_404

def liste_articles(request):
    articles = Article.objects.filter(publie=True)
    return render(request, 'blog/liste.html', {'articles': articles})

def detail_article(request, article_id):
    article = get_object_or_404(Article, pk=article_id, publie=True)
    return render(request, 'blog/detail.html', {'article': article})

Sources