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 %}Görev
KolayBaşlığı olmayan bir etkinliği reddet:
- Başlık boşsa veya yalnızca boşluklardan oluşuyorsa,
new_eventform sayfasını yeniden gösterir; formun üstündePlease 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")
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