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/. La route acquisisce l’id con <int:pk>, come facevano le tue pagine di dettaglio, e l’helper dello starter task_to_dict(task) trasforma un’attività in un dizionario.

La novità è un’attività mancante. get_object_or_404 risponde con la pagina HTML 404 di Django, che un programma non può leggere, quindi anche un’API invia gli errori in formato JSON, con il codice di stato corretto, il numero che indica l’esito di 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 sollevare un’eccezione: filter(pk=...).first() restituisce la riga oppure None quando non ce n’è nessuna.

challenge icon

Sfida

Facile

Aggiungi un endpoint per una singola attività.

  1. In tasks/views.py, aggiungi task_detail(request, pk). Risponde con task_to_dict(task) in formato JSON. Se non esiste un'attività con quell'ID, rispondi con lo stato 404 e {"error": "Task not found"}.
  2. In tasks/urls.py, aggiungi la route "api/tasks/<int:pk>/" con il nome task_detail.

Apri /api/tasks/99/: vedrai {"error": "Task not found"}.

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