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을 반환합니다.
챌린지
쉬움작업 하나의 엔드포인트를 추가하세요:
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)
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
JSON API의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드