Menu
CoddyTech

Список в формате JSON

Часть раздела JSON API путешествия по Django на Coddy. Урок 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)
challenge icon

Задание

Легко

Перечисли все задачи в формате JSON.

  1. В tasks/views.py добавь представление task_list, которое возвращает список JSON: один объект для каждой задачи с ключами id, title, done и priority.
  2. В tasks/urls.py добавь маршрут "api/tasks/" с именем task_list.

Нажми «Играть»: откроется предварительный просмотр /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