¿Qué son las Cookies? - Cookies con Flask

Hola amigos de Internet. Mi nombre es Luis, y les doy la bienvenida a Mi Diario Python.
En el articulo de hoy veremos un tema imprescindible para el desarrollo web. Las Cokies. Responderemos la pregunta ¿Qué son Cookies?. Y veremos como utilizarlas en nuestras aplicaciones web con Flask.
Índice

    ¿Qué es una “galleta”?

    Las cookies (en español, “galletas”) son un fragmento de información almacenado por un navegador web. Más específicamente, en el disco duro de la persona que visita la pagina. Esta información almacenada, puede ser recuperada nuevamente por el servidor web en posteriores visitas a la misma página.
    Las principales funciones de las cookies son:
    Recordar acceso, conocer si un usuario ya ha visitado la pagina anteriormente y actuar en consecuencia. Como por ejemplo, ocultar cierto contenido.
    Conocer información sobre los hábitos de navegación, e intentos de spyware (programas espía), por parte de agencias de publicidad y otros. Esto puede causar problemas de privacidad y es una de las razones por la que las cookies tienen sus detractores.
    Veamos un como podemos almacenar cookies con Flask. Es muy sencillo. Solo debemos utilizar el método set_cookie. Veamos un ejemplo:
    from flask import Flask, make_response
    
    # Creamos la app Flask
    app = Flask(__name__)
    
    @app.route('/')
    def index():
     # Creamos la respuesta
        resp = make_response("")
        # Almacenamos la cookie
        resp.set_cookie('username', 'username_1')
        # retornamos la respuesta
        return resp
    
    if __name__ == '__main__':
     # iniciamos la aplicación
     app.run(debug=True)
    
    Antes de correr el script, hablemos del método make_response(). Te preguntaras, por que estoy usando ese método para crear la respuesta. La cosa es que las cookies se establecen en los objetos de respuesta. Como normalmente solo devuelve cadenas desde las funciones de vista, Flask las convertirá en objetos de respuesta. Para poder hacerlo explícitamente, utilizamos el método make_response(). En mi caso, he enviado un cuerpo vacío. Pero puedes enviar lo que quieres. incluyendo una plantilla (make_response(render_template(…))).
    Ahora veamos el resultado. Nos dirigimos a http://localhosts:5000. Para poder ver la cookie almacenada. Tendremos que ir a **inspeccionador de elementos ** y dirigirnos a la pestaña Application. Y entramos en cookies:
    Muy bien. Como podemos ver, la cookie se almaceno exitosamente. Ahora que sabemos almacenar cookies, es hora de aprender a leer esa información.
    from flask import Flask, request
    
    # Creamos la app Flask
    app = Flask(__name__)
    
    @app.route('/')
    def index():
     # Obtenemos la cookie
        user = request.cookies.get('username')
        # retornamos la respuesta
        return "<h1>Bienvenido " + user + "</h1>"
    
    if __name__ == '__main__':
     # iniciamos la aplicación
     app.run(debug=True)
    
    Como pueden observar, para leer las cookies necesitas importar a request, luego utilizamos cookies.get dándole como argumento el nombre de la cookie. El valor de la cookie la he guardado en una variable user. Veamos el resultado:
    Excelente, como podemos ver la información a permanecido.
    Ahora realizaremos un pequeño ejemplo. Pero antes, te sugiero borrar las cookies que hemos creado. Puedes hacer dando click sobre "Clear All".

    Ejemplo del mundo real

    Ahora que les parece si hacemos un ejemplo. Haremos una aplicación capaz de saber si un usuario ya ha visitado la pagina y mostrar dos mensajes diferentes: uno si el usuario es nuevo y otro si el usuario ya ha visitado la pagina anteriormente. Veamos como hacerlo:
    from flask import Flask, request, make_response
    from random import randint
    
    # Creamos la app Flask
    app = Flask(__name__)
    
    @app.route('/')
    def index():
     # Leemos la cookie "usuario"
     name_user = request.cookies.get('usuario')
    
     # Comprobamos si las cookies existen. De no ser así:
     if user_visit == None and name_user == None:
      # Creamos la respuesta
      res = make_response("<h1>Bienvenido a Mi Diario Python</h1>")
      # Guardamos la cookie "usuario"
      res.set_cookie('usuario', "usuario" + str(randint(1000, 10000)))
      # Retornamos la respuesta
      return res
    
     # Si las cookies sí existen. Se muestra un mensaje con el nombre del usuario
     return "<h1>Bienvenido de vuelta " + name_user + "</h1>"
    
    
    if __name__ == '__main__':
     # iniciamos la aplicación
     app.run(debug=True)
    
    El programa es muy simple. Lo primero que hacemos es solicitar la cookie “usuario” que nos dirá si el usuario ya ha visitado la pagina. Luego comprobamos de que esta cookie existe. Si la cookie tienen valor “None”, significa que el usuario no ha visitado la pagina anteriormente y que la cookie que solicitamos no existe. Por lo que si no existe, creamos la respuesta con make_response y definimos la nueva cookie en donde guardaremos el nombre del nuevo usuario. Luego retornamos “Bienvenido a Mi Diario Python”.
    De lo contrario, si la cookie sí existe, retornamos Bienvenido de vuelta “nombre del usuario”.
    Iniciamos la aplicación y veamos el resultado:
    Ese seria el resultado al entrar por primera vez. Como podemos ver la cookie se ha guardado para su uso posterior.
    Refresquemos la pagina y veamos que sucede:
    Perfecto, como pueden ver, la pagina nos esta dando la bienvenida de vuelta con nuestro nombre de usuario.

    Por ultimo

    Estos son todos los parámetros aceptados por el método set_cookies. Te recomiendo echarle un vistazo. De esta manera podrás configurar tus cookies a tu gusto.
    set_cookie`( _key_ , _value = ''_ , _max_age = None_ , _expires = None_ , _path = '/'_ , _domain = None_ , _secure = False_ , _httponly = False_ , _samesite = None_ )
    
    Perfecto. Espero que el articulo te fuera de mucha ayuda.
    ¿Alguna duda? ¿Alguna sugerencia? Puedes dejar tu comentario y con gusto te responderemos.
    Sin más nada que decir. Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.

    Deja una respuesta

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

    Subir

    Te has suscrito correctamente al boletín

    Se produjo un error al intentar enviar tu solicitud. Inténtalo de nuevo.

    Mi Diario Python will use the information you provide on this form to be in touch with you and to provide updates and marketing.