רשימה כ-JSON
חלק מהיחידה ממשקי API של JSON במסלול ה-Django של Coddy. שיעור 2 מתוך 19.
תוכניות זקוקות לכתובת URL אחת שמפרטת כל משימה. אי אפשר להכניס Task ל־JSON כפי שהוא, לכן תחילה צריך להפוך כל שורה למילון. המתודה values() של QuerySet עושה זאת, עם המפתחות המדויקים שציינת. במודל Book של חנות ספרים:
>>> Book.objects.values("title", "year")
<QuerySet [{'title': 'Dune', 'year': 1965}, {'title': 'Emma', 'year': 1815}]>זה עדיין QuerySet, שכותב ה־JSON לא יודע לטפל בו. list() מריצה את השאילתה ומחזירה רשימה רגילה.
לבסוף, JsonResponse מקבלת רק מילון, אלא אם מעבירים לה safe=False. רשימה ללא האפשרות הזאת תגרום ל־TypeError:
return JsonResponse(["red", "green", "blue"], safe=False)אתגר
קלהציגו כל משימה כ-JSON.
- בקובץ
tasks/views.py, הוסיפו תצוגה בשםtask_listשמחזירה רשימת JSON, אובייקט אחד לכל משימה, עם המפתחותid,title,doneו-priority. - בקובץ
tasks/urls.py, הוסיפו את הנתיב"api/tasks/"בשםtask_list.
לחצו על „הפעלה”: התצוגה המקדימה נפתחת בכתובת /api/tasks/ ומציגה את המשימות לקנות חלב, לכתוב את הדוח ולהתקשר לבנק.
נסו בעצמכם
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)
כל השיעורים ביחידה ממשקי API של JSON
תרגלו בעצמכם: Django אונליין