Menu
CoddyTech

Query String

Termasuk bagian Dasar-Dasar Django dalam perjalanan Django di Coddy. Pelajaran 8 dari 23.

Halaman pesanan selalu menampilkan ukuran medium. Ukuran yang dipilih pelanggan bisa dikirim dalam alamat, setelah tanda tanya: /order/?size=large.

Bagian itu adalah string kueri: pasangan name=value yang digabungkan dengan &. Bagian itu bukan bagian dari rute, jadi path("search/", ...) juga cocok dengan /search/?q=cake. Tampilan membaca pasangan tersebut dari request.GET, yang berfungsi seperti dictionary:

def search(request):
    word = request.GET.get("q", "")
    if len(word) > 30:
        word = word[:30]
    return HttpResponse(f"Results for {word}")

.get() menerima nilai default jika nama tidak ditemukan; request.GET["q"] justru akan menyebabkan error. Setiap nilai diterima sebagai teks, dan siapa pun bisa mengetik apa saja setelah ?, jadi periksa nilai sebelum menggunakannya. Untuk menerima hanya beberapa nilai, bandingkan nilai tersebut dengan list nilai yang diizinkan dan gunakan nilai default untuk nilai lainnya.

challenge icon

Tantangan

Mudah

Buat halaman pemesanan membaca ukuran dari alamat.

  1. Di tampilan order, baca size dari request.GET agar ukuran yang tidak diberikan tidak menyebabkan error.
  2. Untuk ?size=large, berikan respons You ordered a large coffee. Masukkan ukuran ke dalam kalimat agar small dan medium juga berfungsi.
  3. Ukuran lainnya, atau jika ukuran tidak diberikan, akan memesan ukuran medium.

Buka /order/?size=huge: kamu akan melihat You ordered a medium coffee.

Coba sendiri

from django.http import HttpResponse

DRINKS = {
    "espresso": {"name": "Espresso", "price": 2.5, "description": "A short, strong shot of coffee."},
    "latte": {"name": "Latte", "price": 3.5, "description": "Espresso with lots of steamed milk."},
    "flat-white": {"name": "Flat White", "price": 3.75, "description": "Espresso with a thin layer of silky milk."},
    "hot-chocolate": {"name": "Hot Chocolate", "price": 3, "description": "Dark chocolate melted into warm milk."},
}


def home(request):
    return HttpResponse("<h1>Welcome to Corner Café</h1><p>Fresh coffee and cake every day.</p>")


def about(request):
    return HttpResponse("Corner Café opened in 2026.")


def hours(request):
    return HttpResponse("Open every day from 8:00 to 18:00.")


def contact(request):
    return HttpResponse("Write to us at hello@cornercafe.example.")


def table(request, number):
    return HttpResponse(f"<h1>Table {number}</h1>")


def drink(request, slug):
    item = DRINKS[slug]
    return HttpResponse(f"<h1>{item['name']}</h1><p>{item['description']}</p>")


def order(request):
    size = "medium"
    return HttpResponse(f"You ordered a {size} coffee.")

Semua pelajaran di Dasar-Dasar Django

Latihan sendiri: Playground Django