Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🐍 Django – Top 25 Addons Populaires

Guide IDEO‑Lab des 25 packages les plus utiles pour vos projets Django.

1

Django REST Framework

Powerful toolkit to build Web APIs.

APIRESTSerializers
1.1

Django Compressor

Powerful toolkit to Compress JS and CSS.

APICompressDevOps
1.2

Django Environ

Manage your Django Settings.

APISettingsDevOps
2

Django Debug Toolbar

Debug panel for development.

DebugSQLDev
2

Django Redis

Redis Server Access for Django.

CacheStorageDevOps
3

Django Allauth

Complete authentication management (local, social).

AuthSocialUsers
4

Django Crispy Forms

Elegant form rendering.

FormsTemplates
5

Celery

Async tasks and queue management.

AsyncTasksWorkers
6

Django Channels

WebSockets and async protocols support.

WebSocketsAsync
7

Django-filter

QuerySet filtering based on URL queries.

FilterQuerySet
8

Pillow

Image processing library (ImageField).

ImagesUploads
9

Django-Taggit

Tag management for any model.

TagsModels
10

Django-Storages

Storage backends for S3, Azure, GCS, etc.

StorageS3Media
11

Sentry-SDK

Error monitoring integration.

ErrorsLogging
12

Django-CORS-Headers

CORS headers management for cross-domain requests.

CORSAPISecurity
13

Whitenoise

Simplified static files serving in production.

StaticDeploy
14

Django-Simple-History

Automatic model history tracking.

AuditHistory
15

Django-Extensions

Management commands and enhanced shell.

manage.pyShell
16

Django-Import-Export

Import/export data via admin.

AdminData
17

Django-Guardian

Object-level permissions management.

PermissionsAuth
18

Django-Two-Factor-Auth

Two-factor authentication integration.

2FASecurity
19

Django-HTMX

HTMX integration for dynamic pages without heavy JS.

HTMXFrontend
20

Django-Select2

Select2 widgets integration (autocomplete).

FormsWidgets
21

Django-Jazzmin

Modern responsive theme for Django admin.

AdminTheme
22

Django-Waffle

Feature flags management.

FeaturesFlags
23

Django-Silk

Profiling and inspection of API/SQL requests.

ProfilingDebug
24

Django-Model-Utils

Useful model fields and mixins.

ModelsUtils
25

Django-BAT

Track and block failed login attempts.

SecurityLogin
DJANGO REST FRAMEWORK v3.15

Le Standard Industriel des API Django

Django REST Framework (DRF) est une boîte à outils puissante et flexible pour construire des API Web. Il est conçu pour simplifier la sérialisation des données et gérer les complexités du protocole HTTP (négociation de contenu, authentification, permissions).

Historique & Impact

Créé par Tom Christie (Encode.io), DRF a débuté en 2011. Devant le manque de solutions robustes, le projet a pris son envol grâce à une campagne Kickstarter célèbre pour la version 3, prouvant que les développeurs étaient prêts à payer pour des outils Open Source de qualité.

Aujourd'hui, c'est le package Django le plus utilisé après le framework lui-même.

La "Killer Feature" : Browsable API

Contrairement à d'autres frameworks qui ne renvoient que du JSON brut, DRF génère automatiquement une interface Web HTML navigable pour chaque endpoint. Cela permet aux développeurs de tester, debugger et explorer l'API directement dans le navigateur sans outils tiers comme Postman.

28k+

GitHub Stars

Utilisé par :
  • Mozilla
  • Red Hat
  • Heroku
  • Eventbrite

Installation & Configuration Avancée

Matrice de Compatibilité

DRF VersionDjangoPythonStatut
3.15+4.2, 5.0+3.8 - 3.12Actuel
3.143.2, 4.0, 4.13.6 - 3.10Stable

1. Installation des paquets

TERMINAL / BASH
                        pip install djangorestframework
                        pip install markdown       # Indispensable pour la Browsable API
                        pip install django-filter  # Requis pour les filtres (?price__gt=100)

2. settings.py (Configuration Pro)

Voici une configuration recommandée pour un projet en production.

settings.py
                        INSTALLED_APPS = [
                        ...
                        'rest_framework',
                        'django_filters',
                        ]

                        REST_FRAMEWORK = {
                        # Sécurité : Par défaut, lecture seule pour anonymes, écriture pour auth
                        'DEFAULT_PERMISSION_CLASSES': [
                        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
                        ],
                        # Auth : Session (Web) et Token (Apps/Scripts)
                        'DEFAULT_AUTHENTICATION_CLASSES': [
                        'rest_framework.authentication.SessionAuthentication',
                        'rest_framework.authentication.TokenAuthentication',
                        ],
                        # Pagination : Obligatoire pour éviter de tuer la DB
                        'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
                        'PAGE_SIZE': 20,

                        # Format date/heure ISO 8601
                        'DATETIME_FORMAT': '%Y-%m-%dT%H:%M:%S%z',
                        }

Architecture : La Trinité DRF

Contrairement à Django classique (MVT), DRF repose sur trois piliers distincts.

1. Serializers

Le rôle : Traducteur.

Django manipule des objets Python complexes (QuerySets). Le web parle JSON. Le Serializer fait la conversion dans les deux sens.


  • Valide les données entrantes (POST).
  • Gère les relations (ForeignKeys).
  • Similaire aux Forms Django.

2. ViewSets

Le rôle : Contrôleur.

Au lieu d'écrire une vue pour la liste et une vue pour le détail, un ViewSet regroupe toute la logique CRUD.


  • ModelViewSet : Fournit list, create, retrieve, update, destroy.
  • ReadOnlyModelViewSet : Lecture seule.

3. Routers

Le rôle : Cartographe.

Fini les regex complexes dans urls.py. Le Router prend un ViewSet et génère automatiquement toutes les URLs standard.


  • Gère /api/users/ (GET, POST)
  • Gère /api/users/1/ (GET, PUT, DELETE)

Implémentation CRUD Complète

Création d'une API de gestion de produits. Copiez ces 3 fichiers et vous avez une API fonctionnelle.

1. serializers.py

                        from rest_framework import serializers
                        from .models import Product, Category

                        class ProductSerializer(serializers.ModelSerializer):
                        # Champ calculé (ne vient pas de la DB)
                        discount_price = serializers.SerializerMethodField()
                        # Lien hypertexte vers le détail de la catégorie
                        category = serializers.HyperlinkedRelatedField(
                        view_name='category-detail', read_only=True
                        )

                        class Meta:
                        model = Product
                        fields = ['id', 'name', 'price', 'discount_price', 'category']
                        read_only_fields = ['created_at']

                        def get_discount_price(self, obj):
                        # Logique métier simple
                        return obj.price * 0.9 if obj.on_sale else None

2. views.py

                        from rest_framework import viewsets, filters
                        from rest_framework.permissions import IsAuthenticatedOrReadOnly
                        from django_filters.rest_framework import DjangoFilterBackend
                        from .models import Product
                        from .serializers import ProductSerializer

                        class ProductViewSet(viewsets.ModelViewSet):
                        queryset = Product.objects.all().order_by('-created_at')
                        serializer_class = ProductSerializer

                        # Configuration Permissions
                        permission_classes = [IsAuthenticatedOrReadOnly]

                        # Configuration Filtres et Recherche
                        filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
                        filterset_fields = ['category', 'on_sale']  # ?category=1
                        search_fields = ['name', 'description']      # ?search=iphone
                        ordering_fields = ['price', 'created_at']    # ?ordering=-price

3. urls.py

                        from django.urls import path, include
                        from rest_framework.routers import DefaultRouter
                        from .views import ProductViewSet

                        # Création du routeur
                        router = DefaultRouter()
                        router.register(r'products', ProductViewSet)

                        urlpatterns = [
                        path('api/v1/', include(router.urls)),
                        # Routes pour l'auth browsable API (login/logout)
                        path('api-auth/', include('rest_framework.urls')),
                        ]

Sécurité & Authentification

DRF offre plusieurs mécanismes pour sécuriser votre API.

Méthodes d'Auth

1. Session Authentication

Utilise le système de session de Django (cookies). Parfait pour les appels AJAX depuis le même domaine ou pour l'interface d'admin. C'est le défaut.

2. Token Authentication

Génère un token permanent stocké en base de données. Idéal pour des clients simples (scripts python, apps mobiles basiques).
Header: Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

3. JWT (JSON Web Token)

Le standard moderne (via simplejwt). Stateless, expire, refresh token. Indispensable pour React/Vue/Angular.

Throttling (Limitation)

Pour éviter les attaques DDoS ou le scraping abusif, configurez des limites de débit.

                                REST_FRAMEWORK = {
                                'DEFAULT_THROTTLE_CLASSES': [
                                'rest_framework.throttling.AnonRateThrottle',
                                'rest_framework.throttling.UserRateThrottle'
                                ],
                                'DEFAULT_THROTTLE_RATES': {
                                'anon': '100/day',  # Max 100 req/jour si anonyme
                                'user': '1000/day'  # Max 1000 req/jour si connecté
                                }
                                }

Écosystème & Extensions

DRF est la base, mais ces packages sont quasi-obligatoires en production.

drf-spectacular

Génération automatique de documentation OpenAPI 3.0 (Swagger UI / Redoc). Indispensable pour documenter votre API pour les front-ends.

SimpleJWT

La librairie standard pour gérer l'authentification JWT (access token + refresh token) avec DRF.

django-cors-headers

Ce n'est pas du DRF pur, mais si votre React est sur `localhost:3000` et Django sur `8000`, vous en aurez besoin pour autoriser les requêtes Cross-Origin.

Djoser

Fournit des endpoints REST prêts à l'emploi pour : Login, Register, Reset Password, Activation Email.