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.
Sfida
FacileAggiungi un endpoint per una singola attività.
- In
tasks/views.py, aggiungitask_detail(request, pk). Risponde contask_to_dict(task)in formato JSON. Se non esiste un'attività con quell'ID, rispondi con lo stato404e{"error": "Task not found"}. - In
tasks/urls.py, aggiungi la route"api/tasks/<int:pk>/"con il nometask_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)
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di API JSON
2Lettura delle richieste
Filtrare con una queryCreare con POST5Progetto: organizzare il lavoro
Progetto: le prioritàProgetto: cancellare le attività completateEsercitati da solo: Playground Django