Menu
CoddyTech

Controllo dell'input

Fa parte della sezione Form del percorso Django di Coddy. Lezione 4 di 20.

Invia il modulo con il titolo vuoto e la bacheca riceverà un evento senza nome. Qualsiasi cosa può arrivare in request.POST, quindi una vista la controlla prima di salvare.

Quando l'input non è corretto, la vista non salva nulla e non reindirizza: visualizza di nuovo la pagina del modulo con un messaggio. Un modulo di prenotazione tavoli che accetta da 1 a 8 ospiti:

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

Il controllo viene prima di create(): una volta salvata la riga, il messaggio arriva troppo tardi. Per il testo, .strip() rimuove gli spazi da entrambe le estremità, quindi un titolo composto solo da spazi diventa vuoto. Il template mostra il messaggio solo quando è presente:

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

Sfida

Facile

Rifiuta un evento senza titolo:

  • Quando il titolo è vuoto o contiene solo spazi, new_event mostra di nuovo la pagina del modulo con Please give the event a title. sopra il modulo e non salva nulla.
  • Un modulo con un titolo aggiunge comunque l’evento e reindirizza alla relativa pagina.

Premi Run e invia il modulo con un titolo composto da tre spazi.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Form

Esercitati da solo: Playground Django