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 cambia 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, identificados por el name de cada campo.
Django también protege todos los formularios POST. Otro sitio web podría ocultar un formulario que envía datos a tu sitio, y el navegador del visitante lo enviaría con sus cookies. Este ataque se llama falsificación de solicitudes entre sitios, o CSRF para abreviar. Por eso Django rechaza cualquier solicitud POST sin un token secreto de tu propia página, con el error 403 Forbidden. {% csrf_token %} dentro del formulario inserta ese token. Un formulario de suscripción 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> nombra el campo cuya id coincide con su for, y type="date" muestra un calendario.
Desafío
FácilEn events/templates/events/new_event.html, reemplaza {# Write the form here #} por un formulario.
- Usa
method="post"y coloca{% csrf_token %}primero. Sin él, Django rechaza el formulario con un error 403. - Añade un campo de entrada etiquetado para
title,date(contype="date") yplace; luego, añade un botón de envío.
Añade un evento y después pulsa «Todos los eventos»: aparecerá en la lista.
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