Menu
CoddyTech

Http404 Hatası Yükseltme

Coddy'nin Django Journey'sinin Django Temelleri bölümünün bir parçası. Ders 9 / 23.

/drinks/mocha/ adresini aç. Rota eşleşiyor, ancak DRINKS["mocha"] bir KeyError hatası veriyor ve site, sunucu hatası olan 500 durum koduyla yanıt veriyor. Ziyaretçiye siten bozukmuş gibi görünüyor.

Doğru yanıt, böyle bir sayfanın olmadığını belirten 404'tür. Bir görünüm, Http404 hatası yükselterek bunu belirtir. Kafede on iki masa var, bu nedenle table görünümü /table/40/ isteğini reddedebilir:

from django.http import Http404, HttpResponse


def table(request, number):
    if number > 12:
        raise Http404(f"There is no table {number}")
    ...

return değil, raise: Http404 bir istisnadır ve Django bunu alışılmış 404 sayfasına dönüştürür. HttpResponse("No such page") döndürmek, metni 200 durum koduyla gösterir; bu da tarayıcılara ve arama motorlarına sayfanın var olduğunu bildirir.

challenge icon

Görev

Kolay

menu/views.py dosyasında, slug DRINKS içinde olmadığında drink görünümünün Http404 hatası vermesini sağla.

404 mesajını görmek için /drinks/mocha/ adresini, ardından /drinks/latte/ adresini aç: bu hâlâ çalışıyor.

Kendin dene

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 = request.GET.get("size", "medium")
    if size not in ["small", "medium", "large"]:
        size = "medium"
    return HttpResponse(f"You ordered a {size} coffee.")

Django Temelleri bölümündeki tüm dersler

Kendi başına pratik yap: Django playground