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.
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.
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.
# 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})
