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 dans request.POST, à partir du name de chaque champ.
Django ajoute une règle. Un autre site pourrait dissimuler un formulaire qui envoie des données à votre site, et le navigateur du visiteur l’enverrait avec ses cookies : une attaque appelée CSRF. Django refuse donc toute requête POST sans jeton secret provenant de votre propre page, avec l’erreur 403 Forbidden. {% csrf_token %} dans le formulaire insère ce jeton. 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>Un élément <label> désigne le champ dont le id correspond à son attribut for, et type="date" affiche un calendrier.
Défi
FacileDans new_event.html, écris le formulaire attendu par la vue :
- Il envoie ses champs avec POST et contient le jeton CSRF.
- Une entrée, avec une étiquette, pour chaque valeur lue par la vue. Le champ de date affiche un calendrier.
- Un bouton d’envoi.
Appuie sur Run, ajoute un événement, puis ouvre la page d’accueil.
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