Un formulaire POST
Fait partie de la section Formulaires du Journey Django de Coddy. Leçon 2 sur 20.
La page /events/new/ et sa vue sont prêtes, mais la page ne comporte aucun formulaire pour ajouter un événement. Un formulaire qui modifie des données utilise method="post" : le navigateur envoie les champs dans le corps de la requête, et non dans l’URL. La vue les lit depuis request.POST, en utilisant le name de chaque champ comme clé.
Django protège également chaque formulaire POST. Un autre site web pourrait dissimuler un formulaire qui envoie une requête à votre site, et le navigateur du visiteur l’enverrait avec ses cookies. Cette attaque s’appelle la falsification de requête intersites, ou CSRF en abrégé. Django refuse donc toute requête POST sans jeton secret provenant de votre propre page, avec une réponse 403 Forbidden. La balise {% csrf_token %} à l’intérieur du formulaire insère ce jeton. Voici un formulaire d’inscription à une newsletter :
<form method="post">
{% csrf_token %}
<label for="email">Email</label>
<input id="email" name="email" type="email">
<button type="submit">Subscribe</button>
</form>Une balise <label> désigne le champ dont le id correspond à son attribut for, et type="date" affiche un calendrier.
Défi
FacileDans events/templates/events/new_event.html, remplace {# Write the form here #} par un formulaire.
- Utilise
method="post"et place{% csrf_token %}en premier. Sans cela, Django refuse le formulaire avec une erreur 403. - Ajoute un champ de saisie avec une étiquette pour
title,date(avectype="date") etplace, puis un bouton d’envoi.
Ajoute un événement, puis clique sur All events : il apparaît dans la liste.
Essayez vous-même
{% extends "events/base.html" %}
{% block title %}Add an event{% endblock %}
{% block content %}
<h1>Add an event</h1>
{# Écrivez le formulaire ici #}
{% endblock %}
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