No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprende Inglés, Desarrollo Web, AI, Ciberseguridad y mucho más.

Antes: $249

Currency
$209
Comienza ahora

Termina en:

2 Días
8 Hrs
58 Min
36 Seg
Curso de Flask

Curso de Flask

Bernardo Cassina

Bernardo Cassina

Configuración de Flask

16/36
Recursos

Para activar el development mode debes escribir lo siguiente en la consola:

export FLASK_ENV=development
echo $FLASK_ENV

SESSION: es un intercambio de información interactiva semipermanente, también conocido como diálogo, una conversación o un encuentro, entre dos o más dispositivos de comunicación, o entre un ordenador y usuario.

Aportes 44

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Por si le es útil a alguien, una opción para agregar la configuración dentro del main:


Correr la aplicación, con el famoso if name == ‘main’:

Completo

Como aporte en python existen varias formas de generar strings seguros.

Esta es una de ellas:

import os, binascii
binascii.b2a_hex(os.urandom(20))

Que como resultado daria algo así:

'b6026f861fd41a94c3389d54293de9d04bde6f7c'

Otra forma es usando el modulo secrets que segun su propia documentación indica que se utiliza para generar números aleatorios criptográficamente fuertes, adecuados para administrar datos como contraseñas, autenticación de usuarios, tokens de seguridad y secretos relacionados, el codigo seria este:

import secrets
secrets.token_hex(20)

Que como resultado daría algo así:

'ccaf5c9a22e854856d0c5b1b96c81e851bafb288'

Por ultimo se puede usar tambíen la función token_urlsafe con este codigo:

secrets.token_urlsafe(20)

Obteniendo como resultado algo así:

'dxM4-BL1CPeHYIMmXNQevdlsvhI'

Para el que esté trabajando en windows, le dejo los siguientes comandos para el powershell:

$env:FLASK_ENV="development"
$env:FLASK_APP="nombredeapp.py"

Tambien pueden agregar la configuracion de esta manera:

app = Flask(name)
app.config[‘ENV’] = ‘development’

FLASK_ENV esta deprecado en la version 2.2.0, hojala pudieran actualizar el curso.

FLASK_ENV deprecado

Comparto una “buena práctica” (porfavor corrijan si no es así)
de como usar las variables de configuración para flask

SECRET_KEY = secret_string
app.config.from_pyfile('config.py')

En el minuto 4:01 menciona que la SECRET_KEY se debe generar de una manera programatica. Bueno esto logramaos con la función urandom la cual importamos de la libreria os (https://flask.palletsprojects.com/en/1.1.x/config/)

from os import urandom
from flask import Flask
-------
app = Flask(__name__)
app.config['SECRET_KEY'] = urandom(16)

Pero me queda una duda ¿se puede escribir directamente en el código o necesariamente el output de la función se debe guardar en una variable de ambiente?

En caso de que no corra session, lo tienes que instalar, agrégalo a requirements.txt como flask-Session e instálalo recursivamente en con pip install -r requirements.txt

El profesor está equivocado. lo que vemos en el navegador es una cookie que tiene una referencia a la sesión, las sesiones son del lado del servidor y las cookie del lado el cliente. entonces ese Hash en Value es la referencia a la sesión. y en esta sesión que está en el servidor tenemos guardada la IP, la cual luego se envía al HTML por que así se programo en la linea 41.

¡Hola Comunidad!
.
Si estás usando PowerShell a cambio de CMD.exe (como deberías 🤔) y no te funcionó asignar el ambiente de desarrollo utilizando set, te dejo aquí la manera en cómo asignarlo en PowerShell:
.
Luego de detener la ejecución de Flask, escribe lo siguiente:

(myenv) PS C:\tu_ruta\python\flask> $env:FLASK_ENV="development"

Recuerda que esto lo debes hacer desde la ruta de tu proyecto. Luego reinicia Flask con flask run y ya verás asignado el entorno de desarrollo:

* Serving Flask app "main.py" (lazy loading)
* Environment: development
* Debug mode: on

Antes de irme les recomiendo utilizar PowerShell a cambio de CMD.exe. Revisen aquí.

.
Espero les sirva.
.
¡Saludos!

Para quienes quieren automatizar el venv en win:

crean un archivo con terminacion .bat y guardan el siguiente scrip.

Puede dejar el archivo en la carpeta principal del proyecto o donde quieran, pero deberan modificar la direccion de la carpeta.

CALL venv\Scripts\activate.bat 
    pip install -r requierements.txt
    set "FLASK_APP=main.py"
    set "FLASK_DEBUG=1"
    set "FLASK_ENV=development"
    flask run

Dejo este recurso que explica el uso de la libreria python-dotenv que ayuda mucho en el momento de hacer la configuración de flask, espero les sea de utilidad

https://prettyprinted.com/tutorials/automatically_load_environment_variables_in_flask

Yo lo que hice fue agregar las siguientes lineas en el archivo activate de mi entorno virtual

export FLASK_APP=main.py
export FLASK_DEBUG=1
export FLASK_ENV=development 

En el script de python.

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

No me funcionó el

$ export FLASK_ENV=development

pero me funcionó esto:

export FLASK_ENV=development está deprecado. En su lugar se puede usar esto 👇🏻:

pip install gunicorn
gunicorn main:app

Ya la variable

export FLASK_ENV=development

Está en desuso, hay que usar

export FLASK_DEBUG=1

jajajajaja, esa corroboracion, me gustó

echo "no bugs found!!!"

Este curso está tan desactualizado que es casi imposible de seguir. Deberían ser más cuidadosos en ese sentido y sacar de la lista todos los cursos desactualizados.

También lo puden hacer de la siguiente manera:

Crear un archivo nuevo. En mi caso lo llamé “config py”

class DevelopmentConfig(Config):
    DEBUG = True
    ENV = 'development'

importarlo esa clase a tu main

from config import DevelopmentConfig

app = Flask(__name__)
app.config.from_object(DevelopmentConfig)

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

Si no pueden setear la secret key como en la clase inténtenlo de esta forma:

app.secret_key = 'SECRET KEY'

¡Hola Comunidad!
.
Al ver el video me quedé pensando en cuál sería la mejor manera (o una de las mejores) de generar un SECRET_KEY que fuera seguro para poder guardar la data asociadas a las peticiones del usuario.
.
Creo que si lo pensamos unos minutos todos podemos convenir en que debería ser un número aleatorio (que sería realmente un string con caracteres numéricos) o combinación alfanumérica aleatoria (que nuevamente sería un string con caracteres mixtos).
.
Esto me hizo recordar un video donde se usaba la librería SO que alude al sistema operativo de tal manera que podíamos llamar a su método os.urandom(x) y así crear una cadena de texto con caracteres alfanuméricos e incluso caracteres especiales. Busqué la documentación de este método en la librería OS y especificamente lo recomiendan para uso criptográfico. Aquí la documentación.
.
Según la revisión que hice podríamos generar el valor aleatorio de la siguiente manera:

import os
mi_valor_aleatorio = os.urandom(12)

Si imprimimos mi_valor_aleatorio deberíamos ver algo similar a esto:

\x94\x00x7\xbe\x04\xa2R

** Y, así podríamos asignar este valor aleatorio y por lo tanto seguro a nuestra clave “SECRET_KEY”. **
.
Revisando la documentación de Flask (cosa que debí hacer antes de toda la pensadera 🤡) me di con la sorpresa que han colocado como ejemplo la misma idea a la que inicialmente pude llegar. Aqui la documentación.
.
Espero esa documentación les sirva.
.
¡Saludos!

Para los que están haciendo el curso en la versión de flask de 3.0.3, automáticamente el comando flask run activa un entorno de desarrollo para poder hacer el entorno en producción te recomiendo este link <https://flask.palletsprojects.com/es/latest/deploying/> donde te explican directamente desde la documentación de flask el paso a paso que debes hacer para desplegar tu app a producción. La recomendación es instalar Gunicorn
(06/04/2024) Si no les funciona el set FLAS\_ENV='development' igual pueden realizar los cambios del session, a mí me funciona

Si no quieren hacer lo de la variable global solo pongan:

app.config['FLASK_ENV'] = 'development'

Para ponerlo en modo development, si quieren estar seguros de que este en modo development tienen que ejecutar:

if __name__ == '__main__':
     with app.app_context():
         env = current_app.config.get('FLASK_ENV')
         print(f"La aplicación está en modo: {env}")

deben importar current_app desde flask

‘FLASK_ENV’ is deprecated and will not be used in Flask 2.3. Use ‘FLASK_DEBUG’ instead.+

from flask import Flask, request, make_response, redirect, render_template, session
from flask_bootstrap import Bootstrap5

app = Flask(__name__)
bootstrap = Bootstrap5(app)

app.config['SECRET_KEY'] = 'SUPER SECRETO'  # ! mala práctica

todos = ['Comprar café', 'Hacer ejercicio', 'Grabar video']


@app.route('/')
def index():
    user_ip = request.remote_addr
    response = make_response(redirect('/hello'))
    session['user_ip'] = user_ip
    return response


@app.route('/hello')
def hello():
    user_ip = session.get('user_ip')
    context = {
        'user_ip': user_ip,
        'todos': todos
    }
    return render_template('hello.html', **context)


@app.errorhandler(404)
def not_found(error):
    return render_template('404.html', error=error)


@app.errorhandler(500)
def server_error(error):
    return render_template('500.html', error=error)

Se se super sencillo!!

para Windows el comando es
set FLASK_ENV=development

Nose si les dio la duda como a mi, pero SI, si colocamos

export FLASK_ENV=production

Vuelve a production

MI RESUMEN (con código) 😃 🐍
Activar el ambiente development, quitar la opcion de production por default que tiene flask

export FLASK_ENV=development

Para crear una sesión segura en Flask, iniciamos importando la libreria session y despues agregamos la sesión segura. Para generar la clave segura utilizaremos la libreria secrets

from flask import session
import secrets

my_key = secrets.token_hex(20)
app.config['SECRET_KEY'] = my_key

Guardamos la IP ahora en la sesión, ya no en la cookie.

session['user_ip'] = user_ip

En la ruta hello cambiamos

user_ip = session.get('user_ip')

Por si le sirve a alguien, para ver el contenido de la variable de entorno es

echo $FLASK_ENV

Por si alguien usa PowerShell, puede declarar las variables asi:

$env:FLASK_ENV="development"

Llave secreta

Excelente, manejo de sessiones realmente fácil. Gracias.

Oiga, alguien sabe como comentar en los render? Porque cuando lo hago los comentarios aparecen ahí en la página

Super bien explicado!

Saludos amigos aqui les dejo un blog interesante acerca de las configuraciones de FLASK que de seguro les sera util:

estupendo, excelente u.u