Menu
CoddyTech

Membuat dengan POST

Termasuk bagian API JSON dalam perjalanan Django di Coddy. Pelajaran 5 dari 19.

Program dapat membaca tugasmu, tetapi tidak dapat menambahkan tugas. Untuk membuat tugas, program mengirim POST ke URL daftar dengan tugas sebagai JSON di body permintaan, yaitu data yang dikirim bersamanya. Formulir mengisi request.POST; JSON tidak. Baca body mentah, request.body, lalu ubah menjadi Python dengan json.loads.

Satu URL dapat melakukan dua tugas, yang dipilih berdasarkan request.method. View ini hanya menggemakan apa yang dikirimkan kepadanya:

def echo(request):
    if request.method == "POST":
        data = json.loads(request.body)
        return JsonResponse({"you_sent": data})
    return JsonResponse({"hint": "Send me a POST"})

View yang membuat sesuatu menjawab dengan 201 Created beserta object baru, sehingga program mengetahui id-nya. Kunci yang mungkin tidak disertakan program dibaca dengan nilai default: data.get("colour", "black").

challenge icon

Tantangan

Sedang

Biarkan program membuat tugas dengan POST /api/tasks/:

  • Baca body JSON, seperti {"title": "Pay rent", "priority": "high"}, lalu buat tugasnya. Jika tidak ada priority, nilainya menjadi "normal".
  • Berikan respons berisi tugas baru dan status 201.
  • GET tetap menampilkan dan memfilter daftar.

Bilah alamat hanya mengirim GET. Tekan Jalankan, lalu ketik ini di tab Shell: from django.test import Client; print(Client().post("/api/tasks/", {"title": "Pay rent"}, content_type="application/json").json())

Coba sendiri

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.all()
    done = request.GET.get("done")
    if done == "true":
        tasks = tasks.filter(done=True)
    elif done == "false":
        tasks = tasks.filter(done=False)
    return JsonResponse([task_to_dict(task) for task in tasks], safe=False)


def task_detail(request, pk):
    task = Task.objects.filter(pk=pk).first()
    if task is None:
        return JsonResponse({"error": "Task not found"}, status=404)
    return JsonResponse(task_to_dict(task))
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di API JSON

Latihan sendiri: Playground Django