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)Desafio
FácilListe todas as tarefas como JSON:
- Uma view
task_listque retorna uma lista JSON, com um objeto por tarefa e as chavesid,title,doneepriority. - A rota
"api/tasks/", chamadatask_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
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