HOWTO · Flask
Petición Post de Flask
En esta explicación aprenderás las diferencias entre dos métodos HTTP, GET y POST, y verás cómo enviar datos desde un formulario a una ruta de Flask.
En esta página
GET y POST son métodos HTTP con semánticas de solicitud distintas. Una solicitud GET pide una representación al servidor y suele incluir parámetros de consulta en la URL. Una solicitud POST envía datos en el cuerpo de la solicitud y se usa habitualmente al enviar un formulario. POST no cifra ni oculta esos datos: HTTPS los protege durante el tránsito entre el cliente y el servidor, pero los clientes, el servidor y los sistemas de registro aún pueden acceder a ellos. Usa HTTPS y las medidas de protección adecuadas en la aplicación para la información sensible.
Este ejemplo mantiene coherentes la ruta, el campo del formulario y la clave de búsqueda. Muestra un formulario en /login; al enviarlo, el campo name llega a esa misma ruta, donde Flask lo lee desde request.form.
Entender GET y POST en Flask
Al abrir una página en el navegador, normalmente se envía una solicitud GET. Un formulario puede usar POST cuando se quiere enviar información para procesarla. Estos nombres describen el uso de la solicitud; no son opciones de seguridad. Las cadenas de consulta pueden aparecer en el historial del navegador y en los registros, pero incluir valores en el cuerpo de una solicitud POST no garantiza su confidencialidad ni evita que se registren.
Flask proporciona el método recibido mediante request.method. Una ruta que admite ambos métodos puede mostrar el formulario para GET y procesar el valor enviado para POST. El navegador y el servidor siguen comunicándose por el mismo medio de transporte; configura HTTPS por separado para proteger los datos durante la transmisión.
Crear una ruta de Flask que acepte GET y POST
El argumento methods indica a Flask qué métodos acepta la ruta. En el controlador, decide qué hacer según request.method: devuelve el formulario para GET y procesa los datos enviados para POST. Así, el formulario se envía al mismo endpoint y el comportamiento de la ruta es fácil de seguir.
Crear y enviar el formulario HTML
El atributo method="post" del formulario selecciona POST, y el atributo name="name" de la entrada se convierte en la clave que Flask usa para recuperar su valor. La acción del formulario apunta a /login, la misma ruta que se muestra a continuación. Un botón de envío manda el formulario; para este intercambio básico no hace falta JavaScript.
Leer los datos enviados en el formulario
En una solicitud POST, request.form.get("name", "") recupera el campo enviado y proporciona un valor alternativo si se omitió. La respuesta escapa el valor antes de insertarlo en HTML, de modo que el texto que contiene marcado se muestra como texto y no se interpreta como marcado de la página. En un flujo real relacionado con cuentas o cambios de datos, añade las medidas pertinentes de validación, autenticación, autorización y protección CSRF; elegir POST por sí solo no proporciona esos controles.
Ejecutar y verificar el ejemplo
Instala Flask en tu entorno con python -m pip install Flask, guarda el código siguiente como app.py e inicia el servidor de desarrollo con python -m flask --app app run. El registro de ejecución suministrado indica que el ejemplo de Python completó el caso de éxito configurado con código de salida 0 y sin salida estándar; no registra ninguna solicitud del navegador ni respuesta del servidor.
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
from flask import Flask, request
from markupsafe import escape
app = Flask(__name__)
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
name = request.form.get("name", "")
return f"<h1>Hello, {escape(name)}</h1><a href='/login'>Back</a>"
return """<!doctype html>
<html lang="en">
<meta charset="utf-8">
<title>Login form</title>
<h1>Hello, this is the login page!</h1>
<form action="/login" method="post">
<label>Name: <input type="text" name="name"></label>
<button type="submit">Submit</button>
</form>
</html>"""
Abre http://127.0.0.1:5000/login para ver el formulario. Escribe Ada y envíalo; el navegador manda POST y la respuesta muestra Hello, Ada. En el panel Network de las herramientas de desarrollo del navegador, confirma la solicitud inicial GET y la solicitud POST del formulario; inspecciona el método de solicitud y los datos del formulario. El cuerpo de POST sigue siendo visible para el navegador y el servidor. El servidor de desarrollo sirve para aprender en local; para desplegar, usa un servidor WSGI de producción y HTTPS.