Stack Production — Intégrations

Updo Backend intègre un ensemble de bibliothèques tierces pour une stack production complète.

CORS (django-cors-headers)

Gestion des en-têtes Cross-Origin Resource Sharing pour les frontends SPA.

# settings.py (via .env)
CORS_ALLOWED_ORIGINS = ["http://localhost:3000", "http://localhost:5173"]
CORS_ALLOW_CREDENTIALS = True

Le middleware CorsMiddleware est positionné avant SessionMiddleware dans la pile middleware.

OpenAPI / Swagger (drf-spectacular)

Documentation API auto-générée depuis les ViewSets DRF.

URL

Description

/api/schema/

Téléchargement du schéma OpenAPI 3.0 (YAML)

/api/docs/

Interface Swagger UI interactive

/api/redoc/

Documentation ReDoc

Configuration dans SPECTACULAR_SETTINGS du settings.py.

Throttling / Rate Limiting

Protection contre les abus via les classes de throttling DRF intégrées.

REST_FRAMEWORK = {
    "DEFAULT_THROTTLE_CLASSES": [
        "rest_framework.throttling.AnonRateThrottle",
        "rest_framework.throttling.UserRateThrottle",
    ],
    "DEFAULT_THROTTLE_RATES": {
        "anon": "100/hour",
        "user": "1000/hour",
    },
}
  • Anonymes : 100 requêtes/heure

  • Authentifiés : 1000 requêtes/heure

Audit Trail (django-auditlog)

Suivi automatique de toutes les modifications de modèles Django.

INSTALLED_APPS = [..., "auditlog"]
MIDDLEWARE = [..., "auditlog.middleware.AuditlogMiddleware"]
AUDITLOG_INCLUDE_ALL_MODELS = True

L’historique des modifications est accessible via l’admin Django (table auditlog_logentry). Chaque entrée contient :

  • Modèle et instance modifiés

  • Type d’action (create, update, delete)

  • Champs modifiés (ancien/nouveau)

  • Utilisateur ayant effectué la modification

  • Timestamp

Import/Export de données (django-import-export)

Les données de référence (Currency, Country, Department, UoM) peuvent être importées/exportées via l’admin Django en CSV, XLSX, JSON.

# Exemple d'import programmatique
from src.share_kernel.admin import CurrencyResource

resource = CurrencyResource()
dataset = resource.export()
print(dataset.csv)

L’admin de chaque modèle de référence hérite de TranslatableAdmin + ImportExportModelAdmin.

Sentry (Error Tracking)

Intégration Sentry pour le suivi des erreurs en production. Activé uniquement si SENTRY_DSN est défini dans .env.

SENTRY_DSN=https://xxxxx@o12345.ingest.sentry.io/12345

Configuration :

  • traces_sample_rate=0.1 — 10% des transactions tracées

  • profiles_sample_rate=0.1 — 10% des profils CPU

  • send_default_pii=False — pas de données personnelles envoyées

Pre-commit Hooks

Le fichier .pre-commit-config.yaml configure les hooks suivants :

  1. pre-commit-hooks — trailing whitespace, EOF, YAML, merge conflicts

  2. ruff — lint + auto-fix

  3. ruff-format — formatage du code

  4. mypy — vérification de types statique

Installation :

pip install pre-commit
pre-commit install

Les hooks s’exécutent automatiquement avant chaque git commit.