JSONとしてのリスト
CoddyのDjangoジャーニー「JSON API」セクションの一部。レッスン 2/19。
プログラムには、すべてのタスクを一覧表示する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として一覧表示します:
- タスクごとに1つのオブジェクトを含むJSONリストを返すビュー
task_list。各オブジェクトのキーはid、title、done、priorityです。 task_listという名前のルート"api/tasks/"。
「実行」を押すと、プレビューで /api/tasks/ が開き、3つのタスクが一覧表示されます。
自分で試してみよう
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プレイグラウンド