Girdiyi Denetleme
Coddy'nin Django Journey'sinin Formlar bölümünün bir parçası. Ders 4 / 20.
Başlığı boş bırakıp formu gönderirsen, panoda adı olmayan bir etkinlik oluşur. request.POST içine her şey gelebilir, bu yüzden bir görünüm kaydetmeden önce bunu kontrol eder.
Girdi yanlış olduğunda görünüm hiçbir şey kaydetmez ve yönlendirme yapmaz: mesajla birlikte form sayfasını yeniden görüntüler. 1 ile 8 arasında misafir 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() çağrısından önce yapılır: satır kaydedildikten sonra mesaj için çok geç olur. Metinlerde .strip() baştaki ve sondaki boşlukları kaldırır, böylece yalnızca boşluklardan oluşan bir başlık boş hale gelir. Şablon mesajı yalnızca varsa gösterir:
{% if problem %}
<p class="warning">{{ problem }}</p>
{% endif %}Görev
KolayBaşlığı olmayan bir etkinliği reddet.
events/views.pydosyasındakinew_eventiçinde, başlık boşsa veya yalnızca boşluklardan oluşuyorsa hiçbir şey kaydetme ve form sayfasınıPlease give the event a title.mesajıyla yeniden görüntüle. Başlık içeren bir form yine de etkinliği ekler ve yönlendirme yapar.new_event.htmliçinde, formun üzerinde mesajı yalnızca varsa göster.
Üç boşluktan oluşan bir başlık gönder: Please give the event a title. mesajını görürsün ve hiçbir şey kaydedilmez.
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