Vamos a trabajar con las funciones redirect() y url_for() de Flask en varios ejemplos para que veamos el gran potencial que tienen.
Arrancaremos con la aplicación de ‘Hola mundo!’ de entradas anteriores.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hola_mundo():
return '<h1>Hola mundo con Flask!!</h1>'
if __name__ == '__main__':
app.run(debug=True)
Quizás sea necesario que eches un vistazo a la entrada sobre rutas con Flask antes de continuar viendo sobre estas dos funciones.
Función redirect() con Flask
Vamos a ver con un ejemplo que sencillo es redireccionar desde nuestra aplicación a una URL fuera exterior.
Para trabajar con la función redirect() de Flask es necesario que la importemos.
from flask import redirect
Ahora creamos una ruta en nuestra aplicación ‘Hola mundo!’ que nos redireccionará a un sitio web externo a nuestra aplicación, en este caso al sitio web https://oyola.dev.
Podemos agregar como parámetro un código de estado de nuestra redirección, por defecto si no indicamos ninguno estaremos enviando el 302.
@app.route('/redireccion')
def redireccion():
return redirect('https://oyola.dev')
Si actualizamos nuestro navegador y accedemos a la URL http://localhost:5000/redireccion directamente nos redireccionará al sitio web oyola.dev
Nuestra consola nos imprimirá siempre el código.
"GET /redireccion HTTP/1.1" 302 -
Ahora le vamos a modificar nuestro código especificando un 305 a nuestra redirección para ver como nuestro navegador nos realiza la consulta y nuestro terminal nos indica el código 305.
@app.route('/redireccion')
def redireccion():
return redirect('https://oyola.dev', code=305)

Los códigos aceptados son el 301, 302, 303, 305, 307 y 308.
Ahora podemos indicarle que la redirección se haga al raíz de nuestra aplicación.
@app.route('/redireccion')
def redireccion():
return redirect('/')
Función url_for() con Flask
Ahora vamos a ver algunos ejemplos con la función url_for() que nos permite construir una URL utilizando el nombre de una función como primer argumento y tantos argumentos clave=valor como necesitemos.
Para trabajar con la función url_for() de Flask es necesario que la importemos.
from flask import url_for
Ahora crearemos una ruta para /sumadora que ejecutará la función llamada suma. Esta función lo único que hace es retornar un mensaje de bienvenida.
@app.route('/sumadora')
def suma():
return f'<h1>Bienvenido a la función suma!</h1>'
Ahora desde la ruta /redireccion construiremos mediante url_for una ruta nueva.
¿Cómo vamos a crear esa ruta?
La vamos a crear en una variable llamada url_creada y le pasaremos como primer argumento el nombre de la función ‘suma’ que hemos creado antes, también tres de argumentos (a, b, c) que inventemos (no olvidemos que admite tantos argumentos clave=valor como necesitemos).
- Argumento 1 → Nombre de la función que hemos creado: suma.
- Argumento 2 → a = 1.
- Argumento 3 → b = 2.
- Argumento 4 → c = 3
@app.route('/redireccion')
def redireccion():
url_creada = url_for('suma', a=1, b=2, c=3)
return f'<h1>URL creada → {url_creada}</h1>'
Si abrimos en nuestro navegador la ruta http://127.0.0.1/redireccion veremos que nos muestra un mensaje con la URL generada.

Ha creado una URL con la ruta de la función que hemos pasado como primer argumento → ‘suma’ → /sumadora, más el resto de argumentos que hemos pasado mediante clave=valor → a=1, b=2 y c=3.
Ahora vamos a modificar estas dos funciones un poco para que veamos el alcance que pueden llegar a tener estas dos funciones juntas.
Definiremos la función sumadora para que reciba tres argumentos de tipo int y retorne el resultado de la suma de estos tres números.
@app.route('/sumadora/<int:a>/<int:b>/<int:c>')
def suma(a, b, c):
return f'<h1>La suma de {a} + {b} + {c} = {a + b+ c}</h1>'
Ahora desde la función redirección haremos uso de url_for() y de redirect() para realizar la suma.
@app.route('/redireccion')
def redireccion():
url_creada = url_for('suma', a=1, b=2, c=3)
return redirect(url_creada)
Ahora cuando vayamos a nuestro navegador y escribamos http://localhost:5000/redireccion → directamente nos redirigirá a la URL que hemos creado → /sumadora/1/2/3 y la función ‘suma’ mostrará el resultado de la suma de estos tres argumentos que le estamos pasando con int.

Puede parecer un poco complicado, pero practicando veremos lo sencillo que resulta y la cantidad de usos que podemos darle.