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 convertirse directamente en JSON, así que primero cada fila debe convertirse en un diccionario. El método del QuerySet values() 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}]>

Eso sigue siendo un QuerySet, que el escritor 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. Una lista sin ese argumento genera TypeError:

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

Desafío

Fácil

Incluye todas las tareas como JSON.

  1. En tasks/views.py, añade una vista task_list que responda con una lista JSON, con un objeto por tarea y las claves id, title, done y priority.
  2. En tasks/urls.py, añade la ruta "api/tasks/" con el nombre task_list.

Pulsa «Ejecutar»: la vista previa abre /api/tasks/ y muestra Buy milk, Write the report y Call the bank.

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