Menu
CoddyTech

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 %}
challenge icon

Défi

Facile

Refusez un événement sans titre :

  • Lorsque le titre est vide ou ne contient que des espaces, new_event affiche de nouveau la page du formulaire avec Please 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")
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Playground Django