قائمة بصيغة JSON
جزء من قسم واجهات API بصيغة JSON في رحلة Django على Coddy. الدرس 2 من 19.
تحتاج البرامج إلى عنوان URL واحد يسرد كل مهمة. لا يمكن وضع Task في JSON كما هو، لذا يجب أولًا تحويل كل صف إلى قاموس. تنفّذ طريقة مجموعة الاستعلامات values() ذلك، باستخدام المفاتيح التي تحددها بالضبط. في نموذج Book لمتجر كتب:
>>> Book.objects.values("title", "year")
<QuerySet [{'title': 'Dune', 'year': 1965}, {'title': 'Emma', 'year': 1815}]>لكن الناتج يظل مجموعة استعلامات، لا يعرف كاتب 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/ وتعرض Buy milk وWrite the report وCall the bank.
جرّب بنفسك
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
تدرّب بنفسك: Playground لـ Django