- ¿Qué es un manejador?
- Segmentos en una ruta
- Métodos HTTP: GET, POST y otros
- Probar los métodos
- ¿Cómo decide Flask qué función debe llamar? (
- Usa las herramientas del navegador
Ya has avanzado bastante en este curso, y es momento de entender algo esencial para cualquier aplicación web: cómo Flask encuentra cuál función debe responder a cada solicitud (o request). Hoy vas a aprender cómo los manejadores se registran, cómo se eligen cuando llega un request, y qué pasa si no hay ninguno que coincida.
Prepárate para comprender cómo conectar una URL con una función en Python.
¿Qué es un manejador?
Eso lo hace una función que en Flask llamamos manejador (o handler en inglés). Este manejador se vincula a una dirección (o ruta) usando un decorador: @app.route().
Veámoslo con un ejemplo:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hola desde la página principal'
@app.route('/usuarios/')
def usuarios():
return 'Lista de usuarios'
- El manejador
index()se activa cuando alguien entra a la raíz del sitio:/. - El manejador
usuarios()se activa con/usuarios/.
El decorador @app.route() está diciéndole a Flask:
> Cuando llegue alguien a esta dirección, llama a esta función.
Segmentos en una ruta
Una dirección web está compuesta por segmentos, separados por /. Mira este ejemplo:
/tienda/productos/12
Aquí hay tres segmentos: "tienda", "productos" y "12".
Flask puede procesar esto para decidir qué función debería manejar ese request. En próximos módulos aprenderás a capturar esos valores dinámicos también.
Métodos HTTP: GET, POST y otros
Cuando un navegador o programa hace un request, no solo envía una dirección, también lo hace con un método: GET, POST, PUT, DELETE, etc.
Por ejemplo:
GETes para pedir información.POSTes para enviar o crear algo.
En Flask, puedes:
Opción 1: Un mismo manejador que acepta varios métodos
from flask import request
@app.route('/saludo', methods=['GET', 'POST'])
def saludo():
if request.method == 'POST':
return '¡Hola con POST!'
return '¡Hola con GET!'
🔍 Aquí se utiliza request.method para distinguir entre GET y POST.
Opción 2: Un manejador por método
@app.get('/saludo')
def saludo_get():
return 'Hola desde GET'
@app.post('/saludo')
def saludo_post():
return 'Hola desde POST'
Ambas formas funcionan. Escoge la que mejor se adapte a tu lógica.
Probar los métodos
Para probar tus rutas sin usar el navegador, puedes usar curl desde la terminal.
curl -X GET http://localhost:8000/saludo
# Respuesta: Hola desde GET
curl -X POST http://localhost:8000/saludo
# Respuesta: Hola desde POST
¿Cómo decide Flask qué función debe llamar? (
Este proceso se llama despacho (en inglés: dispatch).
Antes de Flask
- Un cliente (por ejemplo, curl, navegador o app móvil) hace una solicitud a una ruta como /usuarios
- El servidor web (como Werkzeug o Gunicorn) redirige ese request a nuestra aplicación Flask
Dentro de Flask
- Flask analiza el request: dirección (ruta) y método (
GET,POST, etc.) - Busca si algún manejador fue registrado para esa ruta
- Si lo encuentra, llama esa función
- La respuesta que devuelva se envía al cliente
A todo este proceso se le llama también ruteo (routing). Las reglas del ruteo las almacena Flask internamente en un componente que podemos pensar como un "router".
Veamos un ejemplo funcional:
from flask import Flask, request
app = Flask(__name__)
# Ruta para la página raíz
@app.route('/')
def index():
return 'Hola, mundo'
# Ruta para /usuarios, acepta GET y POST
@app.route('/usuarios/', methods=['GET', 'POST'])
def usuarios():
if request.method == 'POST':
return 'POST en /usuarios'
return 'GET en /usuarios'
Si ejecutamos esto y accedemos desde curl o el navegador, Flask sabe qué función llamar gracias a las rutas que definimos.
Podemos ver todas las rutas registradas con este comando:
export FLASK_APP=example:app
python -m flask routes
Posible resultado:
| Recurso | Métodos HTTP | Ruta |
|---|---|---|
| index | GET | / |
| usuarios | GET, POST | /usuarios/ |
Si no registraste ninguna ruta que coincida con el request, Flask responde con un error 404 por defecto.
Ejemplo:
curl http://localhost:8000/comentarios
Resultado:
<!doctype html>
<html lang=en>
<title>404 Not Found</title>
<h1>No encontrado</h1>
<p>No existe una ruta registrada para /comentarios</p>
Este es el comportamiento normal en Flask si no encuentra un manejador correspondiente.
Usa las herramientas del navegador
Cuando algo no funciona como esperas, tu mejor aliado es abrir las herramientas de desarrollo del navegador:
En la pestaña "Red" (Network), puedes ver los requests y sus respuestas directamente. También puedes verificar si hay errores 404 o si una ruta está respondiendo como debería.
Resumen
- Un manejador (handler) es una función que responde a una ruta en la web.
- Se registra con
@app.route(), especificando método(s) y dirección. - Puedes tener un manejador que atienda varios métodos o uno por cada método.
- Flask analiza cada request y determina qué función debe llamar basándose en la ruta y el método.
- Si no encuentra coincidencias, responde con un 404 por defecto.
- Usa
flask routespara ver las rutas registradas. - Puedes probar tu aplicación con
curlo desde las herramientas de desarrollo del navegador.
Esta es la base para crear aplicaciones web sólidas con Flask. Más adelante verás cómo manejar rutas dinámicas y cómo organizar mejor tus manejadores. ¡Buena práctica y sigamos adelante!
Trabajo independiente
Agrega los controladores al archivo example.py, que creamos en el trabajo autónomo de la lección anterior:
@app.get('/users')
def users_get():
return 'GET /users'
@app.post('/users')
def users_post():
return 'POST /users'
Abre esta página en el navegador. Asegúrate de que se muestra en pantalla el texto enviado por el controlador GET. Ejecuta una solicitud POST usando curl. Asegúrate de que se muestra el texto enviado por el controlador POST.
Aplicación de referencia
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.