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)챌린지
쉬움모든 작업을 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 플레이그라운드