No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

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 41

Preguntas 5

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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[鈥楨NV鈥橾 = 鈥榙evelopment鈥

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

FLASK_ENV deprecado

Comparto una 鈥渂uena 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?

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!

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 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

En el script de python.

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

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.

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

Tambi茅n lo puden hacer de la siguiente manera:

Crear un archivo nuevo. En mi caso lo llam茅 鈥渃onfig 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 鈥淪ECRET_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!

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

export FLASK_ENV=development est谩 deprecado. En su lugar se puede usar esto 馃憞馃徎:

pip install gunicorn
gunicorn main:app

鈥楩LASK_ENV鈥 is deprecated and will not be used in Flask 2.3. Use 鈥楩LASK_DEBUG鈥 instead.+

Ya la variable

export FLASK_ENV=development

Est谩 en desuso, hay que usar

export FLASK_DEBUG=1
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