Esc
 Naviguer  Ouvrir Esc Fermer
Aller au contenu

Parcours Python

Confirmé 25 min prérequis : axes 5-7 + 8.0 lus

🎯 Objectif : choisir entre Django, Flask et FastAPI selon le contexte, et savoir lire du code dans chacun. Tu auras besoin du parcours détaillé d’un seul des trois en pratique.

À l'issue de cet axe, tu sauras :

  • Connaître les versions Python actuelles et l'écosystème d'outils 2026
  • Distinguer Django, Flask et FastAPI sur 5 critères clés
  • Maîtriser asyncio pour les frameworks async (FastAPI principalement)
  • Configurer un environnement virtuel avec uv ou venv + pip
  • Choisir entre SQLAlchemy 2, Tortoise ORM, Django ORM
PourContre
Lisibilité : on lit du Python comme du pseudo-codePlus lent que Node ou Go pour les très haut débits
Écosystème data/ML : pas d’équivalent dans les autres langagesAsync ajouté tardivement (asyncio) — coexistence sync/async parfois confuse
Frameworks ultra-mûrs : Django existe depuis 2005, Flask depuis 2010Le packaging Python a longtemps été cauchemardesque (résolu par uv en 2024+)
FastAPI est devenu gold standard des APIs Python en 2026Beaucoup d’écosystèmes anciens (Django ≤ 4) à maintenir
Talent pool énorme (data, ops, web)TypeScript a rattrapé Python en sécurité de typage

Verdict 2026 : Python est un excellent choix si ton équipe a un fort fond data/ML, ou si tu veux la productivité d’un Django pour un CRUD complet.

OutilVersion couranteNote
Python3.13 (3.14 en 2025-Q4)Cible 3.12+ pour les nouveaux projets
Django6.0 (LTS)Sortie fin 2025, async views matures
Flask3.0+Stable, peu de changements
FastAPI0.136+ (avril 2026)Releases fréquentes, suit Pydantic v2
Pydanticv2 (réécriture en Rust)5 à 50× plus rapide que v1
SQLAlchemy2.xAPI async stable
CritèreDjangoFlaskFastAPI
StyleBatteries-includedMicro-frameworkModerne, async, typé
Auto-doc APIVia DRFVia extensionsNative (OpenAPI auto)
Async supportOui (3.0+, mature en 6.0)Limité (Quart pour async)Async-first
Courbe d’apprentissageMoyenne (concepts spécifiques)FaibleFaible si tu connais Pydantic
Productivité CRUD completExcellente (admin auto)À assembler toi-mêmeExcellente (sans admin)
Cas typiqueApp métier, intranet, plateforme contenuMicroservice, prototype, script webAPI REST publique, performante
Si tu veux…Choisis
Un CRUD complet avec admin auto en 1 jourDjango
Une API REST moderne, async, avec doc autoFastAPI
Un microservice minimaliste ou un prototypeFlask
Faire de la data viz / dashboard interneStreamlit ou Dash (hors web standard)

uv (par Astral, mêmes créateurs que Ruff) remplace pip + virtualenv + pyenv en un seul outil écrit en Rust. 10 à 100× plus rapide.

Fenêtre de terminal
# Installer uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Créer un projet
uv init mon-projet
cd mon-projet
# Ajouter une dépendance
uv add fastapi uvicorn
# Créer un environnement virtuel et installer les deps
uv sync
# Lancer Python avec les deps installées
uv run python script.py
# Lancer un script avec inline dependencies
uv run --with httpx hello.py

Pourquoi changer pour uv :

  • 1 outil au lieu de 4 (pip, virtualenv, pyenv, pip-tools).
  • uv.lock pour des installs reproductibles (équivalent du package-lock.json).
  • Détecte et installe la version Python automatiquement.

Ruff remplace Black + isort + Flake8 + plein d’autres en un seul outil Rust ultra-rapide.

Fenêtre de terminal
uv add --dev ruff
uv run ruff check . # lint
uv run ruff format . # format (équivalent black)
Python 3.13 + uv + Ruff + mypy + FastAPI + SQLAlchemy 2 + Pydantic v2 + pytest

C’est le combo gagnant pour démarrer une API Python en 2026.

Si tu choisis FastAPI, tu utiliseras async/await partout. Si Django (≥ 4) ou Flask, c’est mixte.

import asyncio
async def fetch_user(user_id: int) -> dict:
# ici on attendrait un I/O (DB, HTTP)
await asyncio.sleep(0.1)
return {"id": user_id, "name": "Alice"}
async def main():
# Parallèle
users = await asyncio.gather(
fetch_user(1),
fetch_user(2),
fetch_user(3),
)
print(users)
asyncio.run(main())

Règles :

  • async def pour déclarer une fonction async.
  • await pour attendre un autre async.
  • asyncio.gather(...) pour paralléliser.
  • Ne jamais bloquer dans un async : pas de time.sleep, pas de requests.get. Utilise asyncio.sleep, httpx, aiofiles.
ORMStyleFournit
Django ORMSchema-first via models.pyMigrations, admin, queryset chainable
SQLAlchemy 2Verbose mais puissant, sync ou asyncLe plus flexible pour des modèles complexes
SQLModelSQLAlchemy + Pydantic en une libBon défaut FastAPI
Tortoise ORMAsync-first, inspiré Django ORMSi tu veux du Django-like en async

Recommandation :

  • Django : utilise son ORM natif (pas le choix, c’est intégré).
  • FastAPI : SQLModel (SQLAlchemy 2 + Pydantic) ou SQLAlchemy 2 async.
  • Flask : SQLAlchemy 2 (via Flask-SQLAlchemy 3+).
CibleOutil
Conteneur DockerPython slim image, Gunicorn (sync) ou Uvicorn (async)
Plateforme PaaSRender, Fly.io, Railway — tous supportent Python directement
ServerlessAWS Lambda + Mangum (FastAPI), Vercel Python runtime
EdgeLimité côté Python — préfère Node/Hono pour l’edge
# Dockerfile FastAPI typique
FROM python:3.13-slim
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN pip install uv && uv sync --frozen
COPY . .
CMD ["uv", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

L’exercice de référence sera implémenté en FastAPI (le plus moderne et le plus pertinent pour une API en 2026). Si tu choisis Django, tu devras adapter — le sous-parcours Django propose un projet équivalent.

📁 Code : exercises/08-backend/02-python/fastapi/taskly-api/

Tu démarres une API Python en 2026 qui doit gérer 1000 req/s avec doc OpenAPI automatique. Framework idéal ?
Tu installes les deps d'un projet Python clone de GitHub. Quel outil moderne 2026 ?
Dans une fonction `async def` FastAPI, tu fais `time.sleep(2)`. Que se passe-t-il ?

Choisis ton sous-parcours :

  • Django — productivité maximale pour un CRUD complet
  • Flask — minimalisme et liberté
  • FastAPI — modernité, async, typé, OpenAPI auto