Un formulario POST
Parte de la sección Formularios del Journey de Django de Coddy. Lección 2 de 20.
La página /events/new/ y su vista están listas, pero la página no tiene ningún formulario para añadir un evento. Un formulario que modifica datos usa method="post": el navegador envía los campos en el cuerpo de la solicitud, no en la URL. La vista los lee de request.POST, usando como clave el name de cada entrada.
Django añade una regla. Otro sitio web podría ocultar un formulario que envíe datos a tu sitio, y el navegador del visitante lo enviaría junto con sus cookies: un ataque llamado CSRF. Por eso, Django rechaza cualquier POST que no incluya un token secreto de tu propia página y responde con 403 Forbidden. {% csrf_token %} dentro del formulario añade ese token. Un formulario para suscribirse a un boletín:
<form method="post">
{% csrf_token %}
<label for="email">Email</label>
<input id="email" name="email" type="email">
<button type="submit">Subscribe</button>
</form>Un <label> identifica la entrada cuyo id coincide con su for, y type="date" muestra un calendario.
Desafío
FácilEn new_event.html, escribe el formulario que espera la vista:
- Envía sus campos mediante POST e incluye el token CSRF.
- Un campo de entrada, con una etiqueta, para cada valor que lee la vista. El campo de fecha muestra un calendario.
- Un botón de envío.
Pulsa Run, añade un evento y después abre la página de inicio.
Pruébalo tú mismo
{% extends "events/base.html" %}
{% block title %}Add an event{% endblock %}
{% block content %}
<h1>Add an event</h1>
{# Escribe el formulario aquí #}
{% endblock %}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Formularios
1Formularios HTML
Un formulario de búsquedaUn formulario POSTRedirigir después de POST2Formularios de Django
Un formulario de DjangoDibujar un formulario5Proyecto: Lista de invitados
Una confirmación de asistencia por correo electrónicoUna página para invitadosPractica por tu cuenta: Playground de Django