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으로 나열하세요.
tasks/views.py에 작업마다 하나의 객체를 포함하는 JSON 목록으로 응답하는 뷰task_list를 추가하세요. 각 객체에는id,title,done및priority키가 있어야 합니다.tasks/urls.py에 이름이task_list인"api/tasks/"경로를 추가하세요.
‘플레이’를 누르세요. 미리보기가 /api/tasks/를 열고 Buy milk, Write the report 및 Call the bank를 나열합니다.
직접 해보기
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 플레이그라운드