Dans Django REST Framework, les vues basées sur APIView transforment la requête HTTP brute en un objet Request enrichi, fournissant une interface cohérente pour accéder aux données et appliquer des traitements tels que l'authentification ou la négociation de contenu.
Enrichissement de l'objet Requête
Lors de l'initialisation d'une vue, la méthode as_view instancie une nouvelle requête via la classe Request, en encapsulant la requête originale ainsi que plusieurs composants configurables :
# Exemple d'instanciation dans une vue
requete_enrichie = Request(
requete_brute=requete_initiale,
parseurs=self._charger_parseurs(),
authenticateurs=self._recuperer_authenticateurs(),
negociateur=self._obtenir_negociateur(),
contexte=self._construire_contexte(requete_initiale)
)
Propriétés et Méthodes de l'objet Request
Le constructeur de Request conserve la requête d'origine et intègre les gestionnaires fournis :
def __init__(self, requete_source, parseurs=None, authenticateurs=None,
negociateur=None, contexte_parseur=None):
self._requete_d_origine = requete_source
self._parseurs_disponibles = parseurs or ()
self._authenticateurs_actifs = authenticateurs or ()
self._negociateur_de_contenu = negociateur or self._negociateur_par_defaut()
self._contexte_pour_le_parseur = contexte_parseur
_requete_d_origine: référence à l'objet requête initial.__getattr__: déléguer les attributs manquants vers la requête d'origine. ``` def getattr(self, attribut): try: return getattr(self._requete_d_origine, attribut) except AttributeError: raise AttributeError(f"'{type(self).name}' n'a pas d'attribut '{attribut}'")data: données du corps de la requête parsées, retournées sous forme de dictionnaire ou QueryDict.query_params: paramètres d'URL extraits et convertis en dictionnaire.useretauth: attributs liés à l'authentification, calculés à la première requête puis mis en cache.
Configuration des Parseurs de Données
Pour restreindre le format d'entrée des requêtes, il est possible de spécifier les parseurs au niveau local ou global.
Configuration Locale
Dans la définition de la vue, on indique explicitement les parseurs acceptés :
from rest_framework.parsers import JSONParser
class VueLivres(APIView):
parseurs_autorises = [JSONParser]
# Cette vue n'acceptera que les données au format JSON
Configuration Globale
Dans le fichier settings.py, on définit les parseurs par défaut pour l'ensemble du projet :
PARAMETRES_DRF = {
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
],
}
Une configuration locale prévaut sur la configuration globale ; ainsi, une vue spécifique peut déroger aux règles générales.
Construction de la Réponce
La classe Response de DRF encapsule les données de sortie et gère la négociation de contenu pour renvoyer une réponse adoptée au client.
Paramètres de l'objet Response
| Paramètre | Description |
|---|---|
donnees |
Contenu à sérialiser (dictionnaire, liste, ou instance de sérialiseur). |
statut |
Code de statut HTTP (ex. : 200, 404). |
en_tetes |
En-têtes HTTP personnalisés à inclure dans la réponse. |
type_contenu |
Format MIME de la réponse (géré automatiquement par défaut). |
Formats de Réponse Supportés
DRF prend en charge deux rendus principaux : un format JSON brut et un format HTML enrichi pour la navigation dans un navigateur. La sélection se fait automatiquement en fonction du type de client (navigateur ou API). Pour forcer un format, on peut configurer les rendus :
# Configuration locale dans une vue
from rest_framework.renderers import JSONRenderer
class VueArticles(APIView):
rendus_actifs = [JSONRenderer]
# Force la réponse en JSON, même pour les navigateurs
# Configuration globale dans settings.py
PARAMETRES_DRF = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
}
Les paramètres globaux définis dans rest_framework.settings.DEFAULTS servent de base lorsque aucune configuration spécifique n'est fournie.