Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Manejadores de solicitudes Python: Desarrollo web con Flask

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?

En una aplicación web, cuando alguien entra a una dirección como / o /usuarios, lo que uno espera es que el sistema muestre algo específico: una página, un mensaje, datos, etc.

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:

  • GET es para pedir información.
  • POST es 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

  1. Un cliente (por ejemplo, curl, navegador o app móvil) hace una solicitud a una ruta como /usuarios
  2. El servidor web (como Werkzeug o Gunicorn) redirige ese request a nuestra aplicación Flask

Dentro de Flask

  1. Flask analiza el request: dirección (ruta) y método (GET, POST, etc.)
  2. Busca si algún manejador fue registrado para esa ruta
  3. Si lo encuentra, llama esa función
  4. 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/

¿Y si no hay manejador?

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:

DevTool Network

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 routes para ver las rutas registradas.
  • Puedes probar tu aplicación con curl o 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.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY