-
Notifications
You must be signed in to change notification settings - Fork 1
Tuto django et uniformisation
Il y a trois éléments à distinguer quand on manipule Django avec REST, le modèle, le serializer, et la vue.
Le modèle sert à donner a Django la structure de nos ressources. Il se charge tout seul de manipuler la base de donnée. Le modèle est la classe principale de la ressource. Sur le modèle on placera :
- Les propriétés de la ressource (pas besoin de définir un id, il existe par défaut sur django)
- Éventuellement Des fonctions de manipulation de la ressource, et de ses attributs
- Les droits de la ressource (voir le paragraphe DRYPermission)
Le schéma de base d'une ressource est : from django.db import models
class MonModel(models.Model):
################################################################
# CONSTANTS #
################################################################
# Liste de constantes à utiliser en cas de choix, par exemple ici, le champ type
TYPE_1 = 0
TYPE_2 = 2
################################################################
# FIELDS #
################################################################
# Liste des champs de l'objet
name = models.CharField(max_length=254)
group = models.ForeignKey('MonAutreModele')
type = models.PositiveSmallIntegerField(default=TYPE_0)
################################################################
# PERMISSIONS #
################################################################
def has_object_read_permission(self, request):
return True
@staticmethod
def has_read_permission(request):
return True
def has_object_write_permission(self, request):
return True
@staticmethod
def has_write_permission(request):
return True
Il se charge d'effectuer la transformation : représentation <=> modèle django Ici, il se chargera de transformer une ressource django en json pour l'envoi, et convertir du json en ressource django pour modifier la base de donnée. Cette classe est souvent très vide puisqu'il existe une base RESTFramework qui permet de créer automatiquement le serializer à partir du modèle Django. Important, il ne peut pas automatiquement décrire une relation ! Il faut alors lui expliquer comment il est censé traduire une relation, en code JSON. Le plus souvent, il s'agit du cas OneToMany, où il suffit de lui dire de donner la clé primaire de l'objet pointé.
Exemple type d'un sérializer : from rest_framework import serializers
from sigma_core.models.monmodel import MonModel
from sigma_core.models.monmodel import MonAutreModel
class MonSerializer(serializers.ModelSerializer):
class Meta:
model = MonModel
# On precise que la relation MonModel.group doit se traduire par la clef primaire de l'objet pointe
group = serializers.PrimaryKeyRelatedField(queryset=MonAutreModel.objects.all())