Menu
CoddyTech

Eine Liste als JSON

Teil des Abschnitts JSON-APIs der Django-Journey von Coddy. Lektion 2 von 19.

Programme benötigen eine URL, die alle Aufgaben auflistet. Ein Task kann nicht einfach so in JSON übernommen werden, daher muss jede Zeile zuerst zu einem Wörterbuch werden. Die QuerySet-Methode values() erledigt das mit genau den Schlüsseln, die du angibst. Beim Book-Modell eines Buchladens:

>>> Book.objects.values("title", "year")
<QuerySet [{'title': 'Dune', 'year': 1965}, {'title': 'Emma', 'year': 1815}]>

Das ist immer noch ein QuerySet, das der JSON-Writer nicht kennt. list() führt die Abfrage aus und liefert eine einfache Liste.

Zuletzt akzeptiert JsonResponse nur ein Wörterbuch, es sei denn, du übergibst safe=False. Eine Liste ohne diesen Parameter löst TypeError aus:

return JsonResponse(["red", "green", "blue"], safe=False)
challenge icon

Aufgabe

Einfach

Liste jede Aufgabe als JSON auf:

  • Eine View task_list, die eine JSON-Liste zurückgibt, mit einem Objekt pro Aufgabe und den Schlüsseln id, title, done und priority.
  • Die Route "api/tasks/" mit dem Namen task_list.

Klicke auf „Run“: Die Vorschau öffnet /api/tasks/ und listet die drei Aufgaben auf.

Probier es selbst

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)

Alle Lektionen in JSON-APIs

Übe selbstständig: Django-Playground