Menu
CoddyTech

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 %}
challenge icon

Görev

Kolay

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

  1. events/views.py dosyasındaki new_event iç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.
  2. new_event.html iç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")
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