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, alors une vue vérifie les données avant de les enregistrer.
Lorsque la saisie est incorrecte, la vue n’enregistre rien et ne redirige pas : elle affiche à 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 se fait avant create() : une fois la ligne enregistrée, le message arrive trop tard. Pour le texte, .strip() supprime les espaces aux deux extrémités, de sorte qu’un titre composé uniquement d’espaces devient vide. Le modèle affiche le message uniquement s’il y en a un :
{% if problem %}
<p class="warning">{{ problem }}</p>
{% endif %}Défi
FacileRefuse un événement sans titre.
- Dans
new_eventdeevents/views.py, lorsque le titre est vide ou ne contient que des espaces, n’enregistre rien et affiche de nouveau la page du formulaire avec le messagePlease give the event a title.Un formulaire comportant un titre ajoute quand même l’événement et redirige. - Dans
new_event.html, affiche le message au-dessus du formulaire uniquement s’il y en a un.
Envoie un titre composé de trois espaces : tu vois Please give the event a title. et rien n’est enregistré.
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