Menu
CoddyTech

Una tarea por ID

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

Un programa que leía la lista ahora quiere una tarea, en su propia URL: /api/tasks/1/. La ruta recibe el id con <int:pk>, como lo hacían tus páginas de detalles, y el ayudante inicial task_to_dict(task) convierte una tarea en un diccionario.

La novedad es el caso de que falte una tarea. get_object_or_404 responde con la página HTML 404 de Django, que un programa no puede leer, así que una API también envía sus errores como JSON, con el código de estado adecuado, el número que indica cómo fue una solicitud: 200 OK, 403 Forbidden, 404 Not Found. JsonResponse lo recibe como status:

return JsonResponse({"error": "Staff only"}, status=403)

Para elegir entre el error y la tarea, busca la fila sin provocar una excepción: filter(pk=...).first() devuelve la fila o None si no hay ninguna.

challenge icon

Desafío

Fácil

Añade un punto de conexión para una tarea.

  1. En tasks/views.py, añade task_detail(request, pk). Responde con task_to_dict(task) en formato JSON. Cuando no haya ninguna tarea con ese id, responde con el estado 404 y {"error": "Task not found"}.
  2. En tasks/urls.py, añade la ruta "api/tasks/<int:pk>/" con el nombre task_detail.

Abre /api/tasks/99/: verás {"error": "Task not found"}.

Pruébalo tú mismo

from django.http import JsonResponse
from django.shortcuts import render

from .models import Task


def task_to_dict(task):
    return {
        "id": task.id,
        "title": task.title,
        "done": task.done,
        "priority": task.priority,
    }


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)


def task_list(request):
    tasks = Task.objects.values("id", "title", "done", "priority")
    return JsonResponse(list(tasks), safe=False)
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de API JSON

Practica por tu cuenta: Playground de Django