Menu
CoddyTech

ID로 조회하는 하나의 작업

Coddy Django 여정의 JSON API 섹션에 포함된 레슨. 19개 중 3번째.

목록을 읽던 프로그램이 이제 자체 URL인 /api/tasks/1/에서 작업 하나를 원합니다. 이 경로는 상세 페이지에서 했던 것처럼 <int:pk>로 id를 받고, 시작 코드에 포함된 도우미 task_to_dict(task)는 작업을 딕셔너리로 변환합니다.

새로 추가된 부분은 작업이 없는 경우입니다. get_object_or_404는 Django의 HTML 404 페이지로 응답하는데, 프로그램은 이를 읽을 수 없습니다. API는 올바른 상태 코드와 함께 오류도 JSON으로 응답합니다. 상태 코드는 요청이 어떻게 처리되었는지를 나타내는 숫자입니다. 200 OK, 403 Forbidden, 404 Not Found가 있습니다. JsonResponse에서는 status로 지정합니다.

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

오류 응답과 작업 응답 중 무엇을 보낼지 결정하려면 예외를 발생시키지 않고 행을 조회합니다. filter(pk=...).first()는 행을 반환하거나, 행이 없으면 None을 반환합니다.

challenge icon

챌린지

쉬움

작업 하나의 엔드포인트를 추가하세요:

  • task_detail(request, pk) 뷰가 task_to_dict(task)를 JSON으로 반환합니다.
  • ID가 없으면 상태 코드 404와 함께 {"error": "Task not found"}를 반환합니다.
  • task_detail이라는 이름의 "api/tasks/<int:pk>/" 경로를 추가합니다.

실행을 누른 다음 /api/tasks/1/과 /api/tasks/99/를 여세요.

직접 해보기

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실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

JSON API의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드