Menu
CoddyTech

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.

challenge icon

Desafío

Fácil

En events/templates/events/new_event.html, reemplaza {# Write the form here #} por un formulario.

  1. Usa method="post" y coloca {% csrf_token %} primero. Sin él, Django rechaza el formulario con un error 403.
  2. Añade un campo de entrada etiquetado para title, date (con type="date") y place; 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 %}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Formularios

Practica por tu cuenta: Playground de Django