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)Aufgabe
EinfachListe jede Aufgabe als JSON auf:
- Eine View
task_list, die eine JSON-Liste zurückgibt, mit einem Objekt pro Aufgabe und den Schlüsselnid,title,doneundpriority. - Die Route
"api/tasks/"mit dem Namentask_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