Django

Framework web Python batteries incluses - ORM, panneau admin, auth et securite integres des le premier jour

TL;DR

En une ligne : Django est le framework web Python batteries incluses - tout ce dont vous avez besoin, prêt à l’emploi.

Forces principales :

  • Panneau d’administration - un CMS complet gratuit
  • ORM - opérations de base de données sans SQL
  • Sécurité - protection CSRF, XSS, injection SQL intégrée
  • Django 6.0 - partials de template, tâches en arrière-plan, support CSP

Core Concepts

Concept 1: MTV Pattern

Django utilise Model-Template-View (MTV), similaire à MVC :

Model     → Structure de base de données (classes Python)
Template  → HTML avec le langage de template Django
View      → Logique métier, connecte les models aux templates

Concept 2: ORM

Définissez votre schéma de base de données en classes Python. Django gère le SQL.

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    published = models.DateTimeField(auto_now_add=True)

# Utilisation - pas de SQL nécessaire
Article.objects.all()
Article.objects.filter(title__contains='Django')
Article.objects.create(title='Hello', content='World')

Concept 3: URL → View → Template

Les requêtes passent par les URLs vers les views, qui rendent les templates :

# urls.py
urlpatterns = [path('articles/', views.article_list)]

# views.py
def article_list(request):
    articles = Article.objects.all()
    return render(request, 'articles.html', {'articles': articles})

Quick Start

Install and Create Project

pip install django
django-admin startproject mysite
cd mysite
python manage.py runserver

Project Structure

mysite/
├── mysite/
│   ├── settings.py    # Configuration
│   ├── urls.py        # Routage URL
│   └── wsgi.py        # Point d'entrée WSGI
├── manage.py          # Outil CLI
└── db.sqlite3         # Base de données par défaut

Create an App

python manage.py startapp blog

Minimal Example

# blog/views.py
from django.http import JsonResponse

def hello(request):
    return JsonResponse({'message': 'Hello Django!'})

# mysite/urls.py
from django.urls import path
from blog import views

urlpatterns = [
    path('hello/', views.hello),
]

Run

python manage.py runserver
# Ouvrez http://localhost:8000/hello/

Gotchas

Don’t forget to add apps to INSTALLED_APPS

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    ...
    'blog',  # Votre app
]

Migrations are required after model changes

# Après avoir modifié models.py
python manage.py makemigrations  # Créer le fichier de migration
python manage.py migrate         # Appliquer à la base de données

CSRF token required for POST forms

<form method="POST">
    {% csrf_token %}
    <input type="text" name="title">
    <button type="submit">Soumettre</button>
</form>

Static files need configuration

# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']

# template
{% load static %}
<img src="{% static 'logo.png' %}">

When to Use

Idéal pour :

  • Sites web riches en contenu (actualités, blogs)
  • Applications nécessitant beaucoup d’administration
  • Prototypage rapide avec Python
  • Équipes préférant la convention à la configuration

Pas idéal pour :

  • Microservices (utilisez FastAPI)
  • Applications temps réel (utilisez FastAPI + WebSockets)
  • APIs REST simples (Django REST Framework ajoute de la complexité)

Comparaison :

FonctionnalitéDjangoFastAPIFlask
Courbe d’apprentissageMoyenneFacileFacile
Fonctionnalités intégréesNombreusesPeuMinimales
Panneau adminOuiNonNon
Support asyncPartielCompletLimité

Next Steps

Cheatsheet

CommandeDescription
django-admin startproject nameCréer un projet
python manage.py startapp nameCréer une app
python manage.py runserverDémarrer le serveur de dev
python manage.py makemigrationsCréer les migrations
python manage.py migrateAppliquer les migrations
python manage.py createsuperuserCréer un admin
python manage.py shellShell Python avec Django
python manage.py testExécuter les tests