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

Rutas dinámicas Python: Desarrollo web con Flask

En Flask, las rutas no siempre son fijas como /about o /contact. ¿Y si necesitas manejar múltiples cursos o perfiles de usuario sin escribir una función para cada uno? Ahí es donde entran las rutas dinámicas. Veamos cómo funcionan y cómo usarlas.


¿Qué es una ruta dinámica?

La ruta dinámica es una ruta en la que una parte del URL puede cambiar. Pero en lugar de hacer un nuevo manejador (función) por cada valor nuevo, usamos un mismo manejador para todos esos valores, gracias a los “placeholders” (ya veremos qué significa eso).

Miremos estos enlaces de cursos de Códica:

  • https://app.codica.la/courses/python_setup_environment_course
  • https://app.codica.la/courses/python_trees_course
  • https://app.codica.la/courses/internet_fundamentals_course
Todos siguen el mismo patrón: /courses/<algo>.

Ese "algo" cambia según el curso. Puede ser el nombre o un identificador. Así que en lugar de crear un manejador para cada curso, definimos una sola ruta con una parte variable.


¿Cómo se ve eso en Flask?

En Flask, una parte dinámica en una ruta se escribe así:

@app.route('/courses/<id>')
def courses_show(id):
    return f'El id del curso es: {id}'

Este código define una ruta que responde a cualquier dirección que empiece con /courses/ seguida de un valor. Ese valor (por ejemplo "15" o "python_trees_course") se guarda en la variable id y se le pasa a la función.

Probémoslo desde la terminal

curl localhost:8000/courses/132

El id del curso es: 132

Si vas a localhost:8000/courses/132, Flask responde correctamente con ese id.


¿Y qué es un placeholder?

Ahora sí, hablemos del término que usamos arriba: placeholder (espacio reservado o variable del URL).

El placeholder es una parte del URL que puede cambiar.

En este ejemplo:

@app.route('/courses/<id>')

El <id> es un placeholder. En la función courses_show, el argumento debe tener el mismo nombre (id) para que Flask pase correctamente el valor.

Podrías cambiarle el nombre si quieres:

@app.route('/courses/<curso_nombre>')
def mostrar_curso(curso_nombre):
    return f'Nombre del curso: {curso_nombre}'

Flask solo necesita que el nombre dentro de < > coincida con el nombre de la variable en la función.


Slugs: usando texto en lugar de números

A veces en lugar de mostrar un número en el URL, queremos mostrar algo más amigable, como el nombre del curso.

Por ejemplo:

/courses/332 → poco claro

/courses/python_trees_course → mucho mejor

Ese texto con palabras separadas por guiones se llama un slug. Es muy usado en sitios como blogs o tiendas, porque es más fácil de leer y entender.

Solo hay que asegurarse que cada slug sea único y válido como parte de una URL.


Especificar el tipo de dato del placeholder

Flask nos permite decirle qué tipo de valor esperamos en el placeholder. Así evitamos errores y mantenemos el código más claro.

La sintaxis es:

@app.route('/ruta/<tipo:nombre>')

Tipos de datos aceptados

Tipo Descripción
string (por defecto) Cualquier texto sin /
int Solo enteros positivos
float Números decimales positivos
path Como string, pero permite incluir /
uuid Identificadores únicos en formato UUID

Ejemplo con int

@app.route('/courses/<int:id>')
def courses_show(id):
    return f'Curso con ID numérico: {id}'

Si alguien intenta acceder a /courses/abc, Flask devolverá un error 404 porque abc no es un número entero.


Varios placeholders en una misma ruta

Una ruta dinámica puede tener más de un placeholder. Por ejemplo, si tienes cursos y dentro de ellos lecciones, podrías hacer esto:

@app.route('/courses/<int:course_id>/lessons/<int:lesson_id>')
def lessons_show(course_id, lesson_id):
    return f'Curso: {course_id}, Lección: {lesson_id}'

Y si lo probamos:

curl localhost:5000/courses/12/lessons/42

Curso: 12, Lección: 42

Este patrón es muy útil para trabajar con recursos anidados (por ejemplo, publicaciones y comentarios, álbumes y fotos, etc.).


Sobre URLs y rutas

Es importante no confundir dos conceptos:

  • URL (o dirección): es lo que ve el usuario, como /courses/js-react.
  • Ruta: es lo que tú defines en Flask, como /courses/<id>.

Si defines una ruta estática (por ejemplo /about), solo sirve para esa URL. Pero si defines una ruta dinámica como /courses/<id>, podrás usar esa misma ruta para miles de URLs distintas con solo un manejador.


Resumen

  • Una ruta dinámica permite que una parte del URL cambie usando placeholders.
  • En Flask, los placeholders se escriben con <nombre> y se usan como variables en la función.
  • Puedes usar nombres de curso (slugs) en lugar de números para direcciones más amigables.
  • Flask permite especificar el tipo de dato en el placeholder: string, int, float, path, uuid.
  • Es posible usar varios placeholders en la misma ruta para representar relaciones como “curso – lección”.
  • Las rutas dinámicas permiten manejar muchos recursos con un solo manejador de forma limpia y escalable.

Trabajo independiente

  1. Agrega en example.py el manejador del primer ejemplo de esta lección.
  2. Abre en el navegador la página /courses/5.
  3. Intenta cambiar el número.

Procesamiento de imagen

Aplicación de referencia


Materiales adicionales

  1. Enrutamiento dinámico

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