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 das Board erhält ein Ereignis ohne Namen. 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 mit einer Meldung. Ein Tischreservierungsformular, das 1 bis 8 Gäste zulässt:
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 %}Aufgabe
EinfachLehne eine Veranstaltung ohne Titel ab:
- Wenn der Titel leer ist oder nur Leerzeichen enthält, zeigt
new_eventdie Formularseite erneut an, mitPlease give the event a title.über dem Formular, und speichert nichts. - Ein Formular mit einem Titel fügt die Veranstaltung weiterhin hinzu und leitet zu ihr weiter.
Klicke auf „Run“ und sende das Formular mit einem Titel aus drei Leerzeichen ab.
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")
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