Menu
CoddyTech

Eingaben überprüfen

Teil des Abschnitts Formulare der Django-Journey von Coddy. Lektion 4 von 20.

Sende das Formular mit einem leeren Titel ab, und auf dem Board wird ein Ereignis ohne Namen erstellt. In request.POST kann alles ankommen, deshalb prüft eine View die Daten, bevor sie sie speichert.

Wenn die Eingabe falsch ist, speichert die View nichts und leitet nicht weiter: Sie rendert die Formularseite erneut und zeigt eine Meldung an. Ein Tischreservierungsformular, das 1 bis 8 Gäste akzeptiert:

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))

Die Prüfung erfolgt vor create(): Sobald der Datensatz gespeichert ist, kommt die Meldung zu spät. Bei Text entfernt .strip() die Leerzeichen an beiden Enden, sodass ein Titel, der nur aus Leerzeichen besteht, leer wird. Das Template zeigt die Meldung nur an, wenn es eine gibt:

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

Aufgabe

Einfach

Lehne eine Veranstaltung ohne Titel ab.

  1. Wenn der Titel in new_event in events/views.py leer ist oder nur Leerzeichen enthält, speichere nichts und rendere die Formularseite erneut mit der Meldung Please give the event a title.. Ein Formular mit einem Titel fügt die Veranstaltung weiterhin hinzu und leitet weiter.
  2. Zeige in new_event.html die Meldung nur dann oberhalb des Formulars an, wenn es eine gibt.

Gib einen Titel aus drei Leerzeichen ein: Du siehst Please give the event a title. und es wird nichts gespeichert.

Probier es selbst

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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Formulare

Übe selbstständig: Django-Playground