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.
Sfida
FacileAggiungi l'endpoint per una singola attività:
- Una vista
task_detail(request, pk)che restituiscetask_to_dict(task)come JSON. - Per un id mancante,
{"error": "Task not found"}con stato404. - La route
"api/tasks/<int:pk>/", denominatatask_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)
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