Menu
CoddyTech

Girdiyi Denetleme

Coddy'nin Django Journey'sinin Formlar bölümünün bir parçası. Ders 4 / 20.

Başlığı boş olan formu gönderirseniz panoya adsız bir etkinlik eklenir. request.POST içinde her şey bulunabileceğinden, görünüm kaydetmeden önce içeriği kontrol eder.

Girdi hatalı olduğunda görünüm hiçbir şey kaydetmez ve yönlendirme yapmaz: bir mesajla form sayfasını yeniden görüntüler. 1 ila 8 konuk kabul eden bir masa rezervasyon formu:

guests = request.POST["guests"]
if not guests.isdigit() or not 1 <= int(guests) <= 8:
    problem = "Choose between 1 and 8 guests."
    return render(request, "tables/book.html", {"problem": problem})
Booking.objects.create(guests=int(guests))

Kontrol, create() işleminden önce yapılır: satır kaydedildikten sonra mesaj için artık çok geçtir. Metinlerde .strip(), baştaki ve sondaki boşlukları kaldırır; böylece yalnızca boşluklardan oluşan bir başlık boş hâle gelir. Şablon, mesaj varsa onu gösterir:

{% if problem %}
<p class="warning">{{ problem }}</p>
{% endif %}
challenge icon

Görev

Kolay

Başlığı olmayan bir etkinliği reddet:

  • Başlık boşsa veya yalnızca boşluklardan oluşuyorsa, new_event form sayfasını yeniden gösterir; formun üstünde Please give the event a title. mesajı görünür ve hiçbir şey kaydedilmez.
  • Başlığı olan bir form etkinliği ekler ve etkinlik sayfasına yönlendirir.

Run düğmesine bas ve başlığı üç boşluktan oluşan formu gönder.

Kendin dene

from django.shortcuts import get_object_or_404, redirect, render

from .models import Event


def event_list(request):
    q = request.GET.get("q", "")
    events = Event.objects.all()
    if q:
        events = events.filter(title__icontains=q)
    return render(request, "events/event_list.html", {"events": events, "q": q})


def event_detail(request, pk):
    event = get_object_or_404(Event, pk=pk)
    return render(request, "events/event_detail.html", {"event": event})


def new_event(request):
    if request.method == "POST":
        event = Event.objects.create(
            title=request.POST["title"],
            date=request.POST["date"],
            place=request.POST["place"],
        )
        return redirect("events:detail", pk=event.pk)
    return render(request, "events/new_event.html")
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Formlar bölümündeki tüm dersler

Kendi başına pratik yap: Django playground