Menu
CoddyTech

Uma lista em JSON

Parte da seção APIs JSON do Journey de Django da Coddy. Lição 2 de 19.

Os programas precisam de uma URL que liste todas as tarefas. Um Task não pode ser enviado para JSON assim, então cada linha precisa primeiro se tornar um dicionário. O método values() de QuerySet faz isso, com exatamente as chaves que você especificar. No modelo Book de uma livraria:

>>> Book.objects.values("title", "year")
<QuerySet [{'title': 'Dune', 'year': 1965}, {'title': 'Emma', 'year': 1815}]>

Isso ainda é um QuerySet, que o gravador JSON não reconhece. list() executa a consulta e retorna uma lista comum.

Por fim, JsonResponse aceita apenas um dicionário, a menos que você passe safe=False. Uma lista sem isso gera TypeError:

return JsonResponse(["red", "green", "blue"], safe=False)
challenge icon

Desafio

Fácil

Liste todas as tarefas como JSON:

  • Uma view task_list que retorna uma lista JSON, com um objeto por tarefa e as chaves id, title, done e priority.
  • A rota "api/tasks/", chamada task_list.

Pressione Run: a prévia abre /api/tasks/ e lista as três tarefas.

Experimente você mesmo

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)

Todas as lições de APIs JSON

Pratique por conta própria: Playground de Django