Menu
CoddyTech

Une tâche par identifiant

Fait partie de la section API JSON du Journey Django de Coddy. Leçon 3 sur 19.

Un programme qui lisait la liste veut maintenant une tâche, à sa propre URL : /api/tasks/1/. La route récupère l’id avec <int:pk>, comme le faisaient tes pages de détail, et l’outil fourni task_to_dict(task) transforme une tâche en dictionnaire.

La nouveauté, c’est le cas où une tâche est introuvable. get_object_or_404 répond avec la page HTML 404 de Django, qu’un programme ne peut pas lire. Une API renvoie aussi les erreurs en JSON, avec le bon code d’état, le nombre qui indique comment s’est déroulée une requête : 200 OK, 403 Forbidden, 404 Not Found. JsonResponse le reçoit avec status :

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

Pour choisir entre l’erreur et la tâche, recherche la ligne sans déclencher d’exception : filter(pk=...).first() renvoie la ligne, ou None s’il n’y en a pas.

challenge icon

Défi

Facile

Ajoutez le point de terminaison d’une tâche :

  • Une vue task_detail(request, pk) qui renvoie task_to_dict(task) au format JSON.
  • Pour un identifiant manquant, renvoyez {"error": "Task not found"} avec le statut 404.
  • La route "api/tasks/<int:pk>/", nommée task_detail.

Cliquez sur Run, puis ouvrez /api/tasks/1/ et /api/tasks/99/.

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de API JSON

Entraînez-vous par vous-même : Playground Django