Vérification des données saisies
Fait partie de la section Formulaires du Journey Django de Coddy. Leçon 4 sur 20.
Envoyez le formulaire avec un titre vide et le tableau reçoit un événement sans nom. N’importe quoi peut arriver dans request.POST, donc une vue le vérifie avant de l’enregistrer.
Lorsque la saisie est incorrecte, la vue n’enregistre rien et ne redirige pas : elle affiche de nouveau la page du formulaire avec un message. Un formulaire de réservation de table qui accepte de 1 à 8 personnes :
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))La vérification a lieu avant create() : une fois la ligne enregistrée, le message arrive trop tard. Pour du texte, .strip() supprime les espaces aux deux extrémités, de sorte qu’un titre composé uniquement d’espaces devient vide. Le modèle n’affiche le message que s’il y en a un :
{% if problem %}
<p class="warning">{{ problem }}</p>
{% endif %}Défi
FacileRefusez un événement sans titre :
- Lorsque le titre est vide ou ne contient que des espaces,
new_eventaffiche de nouveau la page du formulaire avecPlease give the event a title.au-dessus du formulaire, et n’enregistre rien. - Un formulaire avec un titre ajoute tout de même l’événement et y redirige.
Cliquez sur Run et envoyez le formulaire avec un titre composé de trois espaces.
Essayez vous-même
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")
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Formulaires
1Formulaires HTML
Un formulaire de rechercheUn formulaire POSTRedirection après POST3Formulaires de modèle
Un formulaire de modèleModifier un événementSupprimer un événementMessages de réussiteEntraînez-vous par vous-même : Playground Django