Hoy vamos a ver cómo podemos manejar una sesión en Flask para poder almacenar información entre cada una de las peticiones que hagamos sobre nuestra aplicación.
Objeto Flask Session
Lo primero que tenemos que saber es que el objeto que gestión la sesión en Flask es session
. Por lo tanto lo primero que tenemos que hacer es importar dicho objeto de Flask.
from flask import Flask, session
Objeto Flask Session y las cookies
Es importante saber cómo Flask gestiona las sesiones, ya que no utiliza un espacio de memoria entre cada una de las peticiones, aunque podríamos llegar a extenderlo e implementarlo, si no que lo que hace, por defecto, es crear una cookie con el contenido de la sesión.
Para poder crear la cookie y cifrar su contenido necesita una clave secreta. Definiremos la clave secreta de la siguiente forma:
app.secret_key = 'esto-es-una-clave-muy-secreta'
Cómo podemos apreciar en el navegador aparece la cookie con los datos de la sesión cifrados.
Acceso a Flask Session
Ahora vamos a añadir contenido a la sesión. Por ejemplo, en un primer método vamos a pintar un formulario que pida los datos al usuario y estos los guarde en memoria.
@app.route('/saludo',methods=['POST'])
def saludo():
nombre = request.form['nombre']
apellido = request.form['apellido']
session['nombre'] = nombre
session['apellido'] = apellido
return 'Hola ' + nombre + ' ' + apellido
Vemos que utilizamos la siguiente estructura para guardar datos en sesión.
session['nombre_variable'] = 'valor'
Lo siguiente será consultar esta información de la sesión de Flask y utilizar su contenido. A tl respecto hemos creado un método que pinta esta información.
@app.route('/datos-sesion',methods=['GET'])
def datos_sesion():
if 'nombre' in session:
nombre = session['nombre']
else:
nombre = ''
if 'apellido' in session:
apellido = session['apellido']
else:
apellido = ''
return 'Datos Sesion: ' + nombre + ' ' + apellido
Vemos que utilizacion la misma estructura que antes, pero sin asignación, para poder mostrar el contenido.
session['nombre_variable']
Es interesante también validar que la variable existe en sesión, antes de acceder a ella. Es por ello que hemos utilizado la estructura in
para realizar esta validación.
if 'nombre' in session:
nombre = session['nombre']
De esta forma ya hemos visto cómo podemos manejar la sesión en Flask.