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. In request.POST può arrivare qualsiasi cosa, quindi una vista la controlla prima di salvare.
Quando l'input non è valido, la vista non salva nulla e non reindirizza: visualizza di nuovo la pagina del modulo con un messaggio. Un modulo per prenotare un tavolo 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à, così un titolo composto solo da spazi diventa vuoto. Il template mostra il messaggio solo se è presente:
{% if problem %}
<p class="warning">{{ problem }}</p>
{% endif %}Sfida
FacileRifiuta un evento senza titolo.
- In
new_eventinevents/views.py, quando il titolo è vuoto o contiene solo spazi, non salvare nulla e visualizza di nuovo la pagina del modulo con il messaggioPlease give the event a title.Un modulo con un titolo aggiunge comunque l'evento e reindirizza. - In
new_event.html, sopra il modulo, mostra il messaggio solo se è presente.
Invia un titolo composto da tre spazi: vedrai Please give the event a title. e non verrà salvato nulla.
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")
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