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

Défi

Facile

Refuse un événement sans titre.

  1. Dans new_event de events/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 message Please give the event a title. Un formulaire comportant un titre ajoute quand même l’événement et redirige.
  2. 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")
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