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)Desafio
FácilListe todas as tarefas como JSON.
- Em
tasks/views.py, adicione uma viewtask_listque responda com uma lista JSON, com um objeto por tarefa e as chavesid,title,doneepriority. - Em
tasks/urls.py, adicione a rota"api/tasks/"com o nometask_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
2Lendo requisições
Filtrando com uma consultaCriando com POST5Projeto: Organizando o Trabalho
Projeto: PrioridadesProjeto: Limpar Tarefas ConcluídasPratique por conta própria: Playground de Django