Contenido del curso
Rutas y Plantillas con Jinja
Manejo de Formularios y Datos
Organización del Proyecto y Mejoras
Seguridad y Testing
- 14

Sesiones en Flask con blueprints y cookies
09:09 min - 15

Implementación de Login y Logout con Validación de Sesiones
03:35 min - 16

Validación de formularios en Flask con mensajes de error
04:30 min - 17

Pruebas Unitarias en Flask: Creación y Configuración
12:50 min - 18

Desarrollo de Microservicios con Flask
02:54 min
Formularios en Flask con request.form
Resumen
Los formularios son la puerta de entrada de información en cualquier aplicación web: por ahí pasan los datos que tus usuarios envían al servidor para guardarse en una base de datos. Aprender a manejar el envío de formularios en Flask con request.form, redirect y url_for te permite construir flujos completos de creación de contenido, como una nota nueva, sin perderte entre vistas.
¿Cómo se construye un formulario HTML para enviar datos a Flask?
Todo empieza en el frontend. Crea un archivo note.html con la estructura básica de HTML5 y dentro un <form> con method="POST", porque vas a recibir información que se guardará después.
Dentro del formulario necesitas tres elementos clave:
- Un
labelque describa el campo al usuario. - Un
inputde tipo texto con el atributoname="note"y unid="note". - Un
inputde tiposubmitque funcione como botón "Crear nota".
¿Por qué es tan importante el atributo name del input? Porque ese nombre es la llave con la que Python accederá al valor enviado. Si lo escribes en español o con caracteres especiales, vas a romper la lectura desde el backend.
Una buena práctica que se menciona en clase: las URLs pueden ir en español si tus usuarios hablan español, pero el código y los nombres de campos siempre en inglés.
¿Cómo manejar GET y POST en una misma vista de Flask?
En tu archivo de aplicación crea la función create_note y regístrala con un decorador de ruta apuntando a /crear-nota. Aquí viene un detalle clave: tienes que declarar explícitamente qué métodos HTTP acepta esa ruta pasándole methods=["GET", "POST"].
El GET se encarga de mostrar el formulario al usuario con un render_template("note.html"). El POST se activa cuando el usuario envía el formulario y es donde harás la lógica de guardado o confirmación.
Para separar ambos comportamientos dentro de la misma función usas una validación con el objeto request, que Flask llena automáticamente con la información de la petición que hace el cliente.
python if request.method == "POST": # lógica de guardado
Recuerda importar request desde Flask en la parte superior del archivo, igual que cualquier otro módulo.
¿Cómo leer los datos del formulario con request.form?
Cuando llega un POST, Flask expone un diccionario llamado request.form que contiene todos los campos del formulario indexados por el atributo name que definiste en el HTML.
Para leer el valor de la nota usas request.form.get("note", "No encontrada"). El método get te permite pasar un valor por defecto: si el campo no existe, en vez de devolver None, devuelve el texto que tú decidas. Esto evita que tu HTML muestre un None incómodo.
¿Qué hace request.form en Flask? Es un objeto tipo diccionario que contiene todos los datos enviados por un formulario HTML con método POST, accesibles por el name de cada input.
Un truco rápido para depurar: imprime el valor con print(note) y revisa la consola para confirmar que el dato llega correctamente antes de seguir construyendo lógica.
¿Cómo usar redirect y url_for para redirigir al usuario?
Una vez que recibes los datos, no quieres dejar al usuario en la misma página del formulario. Lo elegante es enviarlo a una pantalla de confirmación usando redirect combinado con url_for.
Primero crea una segunda vista llamada confirmation con su ruta /confirmacion, que por ahora puede retornar un texto simple como "prueba".
Luego, dentro del bloque POST, escribes:
python return redirect(url_for("confirmation", note=note))
¿Por qué usar url_for en vez de escribir la URL directa?
El método url_for recibe el nombre de la función vista, no la URL literal. Esto te da una ventaja enorme de mantenimiento: si mañana decides cambiar /confirmacion por /nota-creada, no tienes que buscar y reemplazar en todo tu codebase. Flask resuelve la URL correcta a partir del nombre de la función.
Además, url_for acepta parámetros extra como note=note, que se agregan automáticamente a la URL como query string para que la vista de destino pueda leerlos.
No olvides importar ambas utilidades junto con request:
python from flask import Flask, render_template, request, redirect, url_for
Si se te olvida, vas a ver un error que dice que redirect no está definido, justo como pasó en la demostración en vivo.
¿Qué pasa cuando envías el formulario?
Con todo conectado, el flujo queda así: el usuario entra a /crear-nota, ve el <h1>Crear una nueva nota</h1> y el campo de texto. Escribe algo como "Esta es una nota de prueba", da clic en el botón y Flask:
- Recibe el
POSTen la misma funcióncreate_note. - Extrae el valor con
request.form.get("note"). - Ejecuta
redirect(url_for("confirmation", note=note)). - El navegador cambia a
/confirmacion?note=Esta+es+una+nota+de+prueba.
Desde la vista confirmation puedes leer ese valor y mostrarlo al usuario para que confirme que su nota fue creada.
Reto: muestra la confirmación en un template HTML
Ahora mismo el mensaje viaja en la URL como parámetro, pero lo ideal es renderizarlo dentro de un template para que el usuario vea una pantalla amigable. Tendrás que usar otro atributo del objeto request para leer parámetros que vienen por la URL y pasarlos al template con render_template.
¿En qué parte del flujo te trabaste? Cuéntame en los comentarios cómo resolviste el reto.