8.2 Flujo completo: del usuario al servidor
Explorarás cómo el usuario interactúa con la aplicación, cómo el frontend solicita datos al backend y cómo se procesan esos datos para mostrar la información al usuario.
Explorarás cómo el usuario interactúa con la aplicación, cómo el frontend solicita datos al backend y cómo se procesan esos datos para mostrar la información al usuario.
Los formularios HTML permiten enviar información del usuario directamente al servidor, sin uso de librerías JavaScript.
Flujo básico:
Este modelo sigue el comportamiento por defecto de los formularios, donde el servidor genera cada respuesta completa.
Un formulario HTML define la estructura para recolectar datos del usuario y enviarlos al servidor.
Atributos clave:
Campos más comunes:
La clave es asignar correctamente los nombres (name) a cada campo para que el servidor los reciba de forma ordenada.
El atributo type en un <input> permite controlar el tipo de dato que se captura y cómo se ve en la interfaz.
Ejemplos comunes:
type="text" para texto libre.type="number" muestra teclado númerico en mobile.type="email" valida estructura de correo.type="date" muestra selector de calendario.type="password" oculta el texto ingresado.Validaciones en el cliente:
required: obliga a llenar el campo.maxlength: restringe la longitud máxima.readonly: impide editar el valor.Estas validaciones mejoran la experiencia del usuario, pero no reemplazan las validaciones en el backend. Sirven como primer filtro, no como defensa.
Cuando el formulario se envía, Flask puede acceder a los datos usando request.form.
Ejemplo básico:
from flask import requesttitulo = request.form['title']estado = request.form['status']
Validaciones básicas:
Este procesamiento ocurre antes de guardar en la base de datos, asegurando que los datos tengan la estructura y valor esperados.
Después de procesar los datos, el backend puede responder de dos formas principales:
1. Redirección:
Después de una acción como crear o editar, es común redirigir a otra vista.
return redirect("/tareas")
Esto evita que el formulario se envíe dos veces al recargar la página.
2. Renderizado de plantilla:
Se puede generar una vista HTML personalizada con los datos procesados.
return render_template("lista.html", tareas=tareas)
Esta respuesta es enviada como HTML completo al navegador, que reemplaza la vista anterior.
Al trabajar con formularios, es común cometer errores que afectan la funcionalidad o experiencia del usuario.
Problemas frecuentes:
required, pueden enviarse valores vacíos sin aviso.action="/crear" debe coincidir con una ruta válida en Flask.method="GET" cuando se espera POST puede bloquear la lógica del backend.Buenas prácticas para evitarlos:
required y maxlength.action apunte a una ruta implementada.GET, POST) sean los esperados con @app.route(..., methods=["POST"]).Aunque el envío por formulario es simple, requiere ciertas medidas mínimas para evitar vulnerabilidades comunes.
Recomendaciones clave:
{{ dato | e }}).Estas prácticas fortalecen la seguridad sin agregar complejidad al flujo clásico de formularios.
Los formularios HTML permiten construir flujos completos entre frontend y backend sin usar JavaScript.
Son la base de toda aplicación web dinámica, y entender su funcionamiento es clave para avanzar a modelos más complejos.
Recursos útiles: