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 chaque tâche. Un Task ne peut pas être converti directement en JSON ; chaque ligne doit donc d’abord devenir un dictionnaire. La méthode QuerySet values() s’en charge, avec exactement les clés que tu indiques. 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 convertisseur 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 tu lui transmets safe=False. Une liste sans cet argument déclenche une TypeError :
return JsonResponse(["red", "green", "blue"], safe=False)Défi
FacileRépertorie chaque tâche au format JSON.
- Dans
tasks/views.py, ajoute une vuetask_listqui renvoie une liste JSON, avec un objet par tâche contenant les clésid,title,doneetpriority. - Dans
tasks/urls.py, ajoute la route"api/tasks/"nomméetask_list.
Appuie sur « Jouer » : l’aperçu s’ouvre sur /api/tasks/ et affiche Buy milk, Write the report et Call the bank.
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