قائمة بصيغة JSON
جزء من قسم واجهات API بصيغة JSON في رحلة Django على Coddy. الدرس 2 من 19.
تحتاج البرامج إلى عنوان URL واحد يسرد كل مهمة. لا يمكن وضع Task في JSON كما هو، لذا يجب أولاً تحويل كل صف إلى قاموس. تنفّذ طريقة QuerySet المسماة values() ذلك، باستخدام المفاتيح التي تحددها بالضبط. في نموذج 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:
- عرض
task_listيستجيب بقائمة JSON، وبداخلها كائن واحد لكل مهمة بالمفاتيحidوtitleوdoneوpriority. - المسار
"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
تدرّب بنفسك: Playground لـ Django