Menu
CoddyTech

JSON으로 표현한 목록

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

프로그램에는 모든 작업을 나열하는 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)
challenge icon

챌린지

쉬움

모든 작업을 JSON으로 나열하세요:

  • 작업마다 하나의 객체를 포함하고, 키가 id, title, done, priority인 JSON 목록을 반환하는 뷰 task_list.
  • 이름이 task_list인 경로 "api/tasks/".

실행을 누르세요. 미리보기에 /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)

JSON API의 모든 레슨

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