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 unverändert 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 zurück.
Zuletzt nimmt JsonResponse nur ein Wörterbuch entgegen, sofern du nicht safe=False übergibst. Eine Liste ohne diese Angabe löst TypeError aus:
return JsonResponse(["red", "green", "blue"], safe=False)Aufgabe
EinfachListe jede Aufgabe als JSON auf.
- Füge in
tasks/views.pyeine Ansichttask_listhinzu, die eine JSON-Liste zurückgibt, mit einem Objekt pro Aufgabe und den Schlüsselnid,title,doneundpriority. - Füge in
tasks/urls.pydie Route"api/tasks/"mit dem Namentask_listhinzu.
Klicke auf „Ausführen“: Die Vorschau öffnet /api/tasks/ und listet Milch kaufen, den Bericht schreiben und bei der Bank anrufen 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