- ¿Qué es una ruta dinámica?
- ¿Cómo se ve eso en Flask?
- ¿Y qué es un placeholder?
- Slugs: usando texto en lugar de números
- Especificar el tipo de dato del placeholder
- Varios placeholders en una misma ruta
- Sobre URLs y rutas
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?
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
/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).
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
- Agrega en
example.pyel manejador del primer ejemplo de esta lección. - Abre en el navegador la página /courses/5.
- Intenta cambiar el número.
Aplicación de referencia
Materiales adicionales
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.