Implémentation des sérialiseurs Serializer dans Django REST Framework

Créasion d'un sérialiseur personnalisé

Pour transformer des objets Python en format JSON, créez un sérialiesur en héritant de serializers.Serializer :

from rest_framework import serializers
from eleves.models import Eleve

class EleveSerializer(serializers.Serializer):
    identifiant = serializers.CharField()
    nom = serializers.CharField()
    genre = serializers.IntegerField()
    naissance = serializers.DateField()
    
    id = serializers.IntegerField(required=False)
    creation = serializers.DateTimeField(required=False)
    modification = serializers.DateTimeField(required=False)

    def creer(self, donnees_validees):
        return Eleve.objects.create(**donnees_validees)
    
    def mettre_a_jour(self, instance, donnees_validees):
        instance.identifiant = donnees_validees.get('identifiant', instance.identifiant)
        instance.nom = donnees_validees.get('nom', instance.nom)
        instance.genre = donnees_validees.get('genre', instance.genre)
        instance.naissance = donnees_validees.get('naissance', instance.naissance)
        instance.save()
        return instance

Insertion de données via le sérialiseur

Utilisez le sérialiseur pour créer de nouvelles entrées :

from eleves.serializers import EleveSerializer

def ajouter_eleve():
    donnees = {
        'identifiant': 'E1001',
        'nom': 'Sophie',
        'genre': 2,
        'naissance': '2019-05-15'
    }
    serialiseur = EleveSerializer(data=donnees)
    serialiseur.is_valid(raise_exception=True)
    serialiseur.save()

Transformation d'objets en JSON

Sérialisez des instances de modèle en structures JSON :

from rest_framework.renderers import JSONRenderer
from eleves.models import Eleve

def lister_eleves():
    instances = Eleve.objects.all()
    serialiseur = EleveSerializer(instances, many=True)
    json_data = JSONRenderer().render(serialiseur.data)
    return json_data

Modification d'enregistrements existants

Mettez à jour des objets via le sérialiseur :

def modifier_eleve():
    donnees = {
        'nom': 'Sophie Renommee',
        'naissance': '2019-06-20'
    }
    instance = Eleve.objects.get(identifiant='E1001')
    serialiseur = EleveSerializer(instance, data=donnees, partial=True)
    serialiseur.is_valid(raise_exception=True)
    serialiseur.save()

Étiquettes: django-rest-framework serializers API Django

Publié le 29 juillet à 21h45