Menu
CoddyTech

Un’attività per ID

Fa parte della sezione API JSON del percorso Django di Coddy. Lezione 3 di 19.

Un programma che ha letto l’elenco ora vuole una singola attività al suo URL: /api/tasks/1/. Il percorso accetta l’id con <int:pk>, come facevano le tue pagine di dettaglio, e l’helper iniziale task_to_dict(task) trasforma un’attività in un dizionario.

La parte nuova è gestire un’attività mancante. get_object_or_404 risponde con la pagina HTML 404 di Django, che un programma non può leggere. Anche un’API restituisce gli errori in JSON, con il codice di stato corretto, il numero che indica come è andata una richiesta: 200 OK, 403 Forbidden, 404 Not Found. JsonResponse lo accetta come status:

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

Per scegliere tra l’errore e l’attività, cerca la riga senza generare un’eccezione: filter(pk=...).first() restituisce la riga oppure None se non ce n’è nessuna.

challenge icon

Sfida

Facile

Aggiungi l'endpoint per una singola attività:

  • Una vista task_detail(request, pk) che restituisce task_to_dict(task) come JSON.
  • Per un id mancante, {"error": "Task not found"} con stato 404.
  • La route "api/tasks/<int:pk>/", denominata task_detail.

Premi Run, poi apri /api/tasks/1/ e /api/tasks/99/.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di API JSON

Esercitati da solo: Playground Django