Menu
CoddyTech

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)
challenge icon

Défi

Facile

Répertorie chaque tâche au format JSON :

  • Une vue task_list qui renvoie une liste JSON, avec un objet par tâche et les clés id, title, done et priority.
  • La route "api/tasks/", nommée task_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