Une liste au format JSON
Fait partie de la section API JSON du Journey Django de Coddy. Leçon 2 sur 19.
Les programmes ont besoin d’une URL qui répertorie toutes les tâches. Un Task ne peut pas être placé tel quel dans du JSON : chaque ligne doit donc d’abord devenir un dictionnaire. La méthode values() de QuerySet s’en charge, avec exactement les clés que vous indiquez. Sur le modèle Book d’une librairie :
>>> Book.objects.values("title", "year")
<QuerySet [{'title': 'Dune', 'year': 1965}, {'title': 'Emma', 'year': 1815}]>Il s’agit toujours d’un QuerySet, que le sérialiseur JSON ne sait pas traiter. list() exécute la requête et renvoie une liste ordinaire.
Enfin, JsonResponse n’accepte qu’un dictionnaire, sauf si vous lui transmettez safe=False. Sans cela, une liste déclenche une TypeError :
return JsonResponse(["red", "green", "blue"], safe=False)Défi
FacileRépertorie chaque tâche au format JSON :
- Une vue
task_listqui renvoie une liste JSON, avec un objet par tâche et les clésid,title,doneetpriority. - La route
"api/tasks/", nomméetask_list.
Clique sur Run : l’aperçu ouvre /api/tasks/ et répertorie les trois tâches.
Essayez vous-même
from django.http import JsonResponse
from django.shortcuts import render
from .models import Task
def home(request):
return render(request, "tasks/home.html", {"tasks": Task.objects.all()})
def stats(request):
data = {
"total": Task.objects.count(),
"done": Task.objects.filter(done=True).count(),
}
return JsonResponse(data)
Toutes les leçons de API JSON
Entraînez-vous par vous-même : Playground Django