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

Défi

Facile

Répertorie chaque tâche au format JSON.

  1. Dans tasks/views.py, ajoute une vue task_list qui renvoie une liste JSON, avec un objet par tâche contenant les clés id, title, done et priority.
  2. Dans tasks/urls.py, ajoute la route "api/tasks/" nommée task_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