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 colocado em JSON tal como está, então cada linha precisa se tornar primeiro um dicionário. O método values() do QuerySet faz isso, com exatamente as chaves que você indicar. 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 gerador de JSON não reconhece. list() executa a consulta e retorna uma lista simples.

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.

  1. Em tasks/views.py, adicione uma view task_list que responda com uma lista JSON, com um objeto por tarefa e as chaves id, title, done e priority.
  2. Em tasks/urls.py, adicione a rota "api/tasks/" com o nome task_list.

Clique em “Jogar”: a pré-visualização abre /api/tasks/ e lista Buy milk, Write the report e Call the bank.

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