Menu
CoddyTech

Una lista como JSON

Parte de la sección API JSON del Journey de Django de Coddy. Lección 2 de 19.

Los programas necesitan una URL que enumere todas las tareas. Un Task no puede incluirse tal cual en JSON, así que primero cada fila debe convertirse en un diccionario. El método values() de QuerySet hace eso, con exactamente las claves que nombres. En el modelo Book de una librería:

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

Sigue siendo un QuerySet, que el escritor de JSON no reconoce. list() ejecuta la consulta y devuelve una lista simple.

Por último, JsonResponse solo acepta un diccionario, a menos que pases safe=False. Si no lo haces, una lista genera TypeError:

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

Desafío

Fácil

Enumera todas las tareas como JSON:

  • Una vista task_list que devuelve una lista JSON, un objeto por tarea con las claves id, title, done y priority.
  • La ruta "api/tasks/", llamada task_list.

Pulsa Run: la vista previa abre /api/tasks/ y muestra las tres tareas.

Pruébalo tú mismo

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 las lecciones de API JSON

Practica por tu cuenta: Playground de Django