Menu
CoddyTech

משימה אחת לפי מזהה

חלק מהיחידה ממשקי API של JSON במסלול ה-Django של Coddy. שיעור 3 מתוך 19.

תוכנית שקראה את הרשימה רוצה עכשיו משימה אחת, בכתובת URL משלה: /api/tasks/1/. הנתיב מקבל את המזהה באמצעות <int:pk>, כמו דפי הפרטים שלך, ועוזר הקוד ההתחלתי task_to_dict(task) הופך משימה למילון.

החלק החדש הוא משימה חסרה. get_object_or_404 מחזירה את דף ה־404 של Django ב־HTML, שתוכנית לא יכולה לקרוא, ולכן API שולח גם את השגיאות שלו כ־JSON, עם קוד הסטטוס המתאים, המספר שמציין כיצד הסתיימה בקשה: 200 OK, 403 Forbidden, 404 Not Found. JsonResponse מקבלת אותו באמצעות status:

return JsonResponse({"error": "Staff only"}, status=403)

כדי לבחור בין השגיאה למשימה, חפש את הרשומה בלי להעלות חריגה: filter(pk=...).first() מחזירה את הרשומה, או את None אם אין כזו.

challenge icon

אתגר

קל

הוסף נקודת קצה עבור משימה אחת.

  1. ב־tasks/views.py, הוסף את task_detail(request, pk). היא מחזירה את task_to_dict(task) כ־JSON. אם אין משימה עם המזהה הזה, החזר סטטוס 404 ואת {"error": "Task not found"}.
  2. ב־tasks/urls.py, הוסף את הנתיב "api/tasks/<int:pk>/" בשם task_detail.

פתח את /api/tasks/99/: תראה את {"error": "Task not found"}.

נסו בעצמכם

from django.http import JsonResponse
from django.shortcuts import render

from .models import Task


def task_to_dict(task):
    return {
        "id": task.id,
        "title": task.title,
        "done": task.done,
        "priority": task.priority,
    }


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)


def task_list(request):
    tasks = Task.objects.values("id", "title", "done", "priority")
    return JsonResponse(list(tasks), safe=False)
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה ממשקי API של JSON

תרגלו בעצמכם: Django אונליין