Rutas con Flask

De la misma forma que pasa con los nombre de dominio, las rutas en Flask son una parte fundamental de nuestra aplicación web. No es igual de cómodo para un usuario acceder a un sitio web pudiendo recordar su URL que sin poder hacerlo.

Rutas o routing con Flask

Trabajar con rutas en Flask es bastante sencillo, el decorador route() de Flask nos abstrae del gran parte del trabajo, teniendo nosotros que indicarle únicamente un string con el endpoint y algunas opciones de forma opcional.

route(rule, **options)

Tengamos en cuenta que un decorador agrega nuevas funcionalidades a los objetos o funciones a los que envuelven.

Creando rutas con Flask

Vamos a partir de nuestra aplicación de ‘Hola mundo!’ para ver el tema de las rutas de Flask.

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)

Rutas estáticas Flask

Ahora mismo solo disponemos de una ruta, la ruta raíz de nuestra aplicación, únicamente podemos ir a http://127.0.0.1:5000 para que se cargue el contenido de nuestra aplicación web.

Vamos a crear una ruta nueva y la agregaremos a nuestra aplicación.

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hola_mundo():
    return '<h1>Hola mundo con Flask!!</h1>'


@app.route('/nueva-ruta')
def nueva_ruta():
    return '<h1>Estamos en la nueva ruta</h1>'


if __name__ == '__main__':
    app.run(debug=True)

Si guardamos los cambios en nuestro código, veremos que ahora podemos navegar por el raíz de nuestra aplicación → http://127.0.0.1:5000 y por la siguiente URL → http://127.0.0.1:5000/nueva-ruta

Recuerda que no hace falta reiniciar el servidor porque tenemos el modo debug activado, únicamente tienes que actualizar la pestaña del navegador.

Nueva ruta con Flask
http://127.0.0.1:5000/nueva-ruta

Si eliminamos de nuestra URL la nueva ruta volveremos al raíz de nuestra aplicación web.

Ruta raíz con Flask
http://127.0.0.1:5000

De esta forma tan sencilla podemos agregar nuevas rutas a nuestra aplicación mediante el decorador route() de Flask.

También podríamos haber creado esta ruta de la siguiente forma.

@app.route('/rutas/nueva-ruta')
def nueva_ruta():
    return '<h1>Estamos en la nueva ruta</h1>'

Hasta ahora hemos creado rutas de forma estática, conociendo de antemano el nombre de las rutas que vamos a necesitar podemos hacerlo así. Pero no podemos crear todas las rutas de nuestra aplicación de esta forma, ya que conocer todas las rutas sería una tarea imposible, existe otra forma para crear rutas de forma dinámica.

Rutas dinámicas Flask

Trabajando con rutas dinámicas en nuestra aplicación Flask se abre un nuevo mundo.

El decorador route() seguirá haciéndonos gran parte del trabajo, pero debemos tener en cuenta, cuando creamos una ruta dinámica podemos incluir en ella diferentes tipos de valores.

Vamos a crear una ruta dinámica en la que podamos incluir un parámetro de tipo string, el nombre de una persona por ejemplo, de esta forma nuestra aplicación nos devolverá un saludo con el nombre de forma dinámica.

@app.route('/saludo/<nombre>')
def saludo(nombre):
    return f'<h1>Mando un saludo a {nombre}</h1>'
Ruta dinámica con Flask
http://127.0.0.1:5000/saludo/Luis

De esta forma si queremos saludar a cien personas no necesitaríamos generar cien URL diferentes una por cada persona a la que saludar, generando una sola vista sería suficiente.

Tipos de parámetros

Podemos especificar parámetros de diferentes tipos, cuando se trata de parámetros string no es necesario que lo especifiquemos.

  • string → aceptar cualquier cadena de texto y la trata como cadena de texto. No acepta el carácter de la barra inclinada a la derecha /.
    <class ‘str’>
  • int → números enteros positivos.
    <class ‘int’>
  • float → números positivos del tipo float.
    <class ‘int’>
  • path → acepta cualquier cadena de texto ya la trata como… Sí acepta el carácter de barra inclinada a la derecha /.
    <class ‘str’>

Vamos a ver otro ejemplo construyendo una URL con el parámetro de tipo int. La llamaremos multiplica y generaremos la vista HTML con la multiplicación del valor que introduzcamos en el parámetro por cinco.

@app.route('/multiplica/<int:numero>')
def multiplica(numero):
    return f'<h1>El resultado de 5 * {numero} es igual a {numero * 5}</h1>'
Ruta dinámica con Flask
http://127.0.0.1:5000/multiplica/50

¿Qué pasa si necesitásemos crear una ruta que recibiese diferentes tipos de parámetros?

Vamos a crear una ruta dinámica que al mismo tiempo que salude realice una operación aritmética. Podemos pasar tantos parámetros como necesitemos siempre que indiquemos el tipo y estén unidos con el símbolo ampersand → &.

@app.route('/calcula-con-saludo/<string:nombre>&<float:numero>')
def calcula_saluda(nombre, numero):
    return f'<h1>Hola {nombre}, el resultado de 5 * {numero} es igual a {numero * 5}</h1>'

Recuerda que podemos omitir en el primer parámetro la palabra string <string:nombre> por <nombre>, ya que cualquier parámetro que enviemos es de tipo string si no indicamos que es de otro tipo.

  • <string:nombre> es lo mismo que <nombre>

También podemos separar nuestros parámetros con una barra inclinada a la derecha /.

@app.route('/calcula-con-saludo/<string:nombre>/<float:numero>')
def calcula_saluda(nombre, numero):
    return f'<h1>Hola {nombre}, el resultado de 5 * {numero} es igual a {numero * 5}</h1>'

Ahora vamos a ver un ejemplo para asociar una URL sin parámetros y otra con parámetros a la misma vista. Vamos a crear una ruta que muestre un listado con algunas opciones, pero que si especificamos en la URL alguna opción nos muestre otra cosa.

Para hacer esto tendremos que colocar dos decoradores, uno para cada URL y asignaremos un valor por defecto a numero=None cuando declaremos nuestra función opciones().

@app.route('/opciones/')
@app.route('/opciones/<int:numero>')
def opciones(numero=None):
    if numero != None:
        return f'<h1>Estás en la opción {numero} del menú</h1>'
    return f'<h1>Menú de opciones</h1>'
Rutas dinámicas con Flask
http://127.0.0.1:5000/opciones – http://127.0.0.1:5000/opciones/134

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *