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
Fundamentos de Flask
Qué aprenderás sobre Flask
¿Cómo funcionan las aplicaciones en internet?
¿Qué es Flask?
Instalación de Python, pip y virtualenv
Hello World Flask
Debugging en Flask
Request y Response
Ciclos de Request y Response
Uso de templates y archivos estáticos
Templates con Jinja 2
Estructuras de control
Herencia de templates
Include y links
Uso de archivos estáticos: imágenes
Configurar páginas de error
Extensiones de Flask
Flask Bootstrap
Configuración de Flask
Implementación de Flask-Bootstrap y Flask-WTF
Uso de método POST en Flask-WTF
Desplegar Flashes (mensajes emergentes)
Pruebas básicas con Flask-testing
Proyecto
Planteamiento del proyecto: To Do List
App Factory
Uso de Blueprints
Blueprints II
Base de datos y App Engine con Flask
Configuración de Google Cloud SDK
Configuración de proyecto en Google Cloud Platform
Implementación de Firestore
Autenticación de usuarios: Login
Autenticación de usuarios: Logout
Signup
Agregar tareas
Eliminar tareas
Editar tareas
Deploy a producción con App Engine
Conclusiones
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
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
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.
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
información útil: https://flask.palletsprojects.com/en/1.1.x/config/
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!
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
Les comparto este enlace, podía serles util:
https://j2logo.com/tutorial-flask-leccion-7-parametros-de-configuracion-proyecto/
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!
Opciones de configuracion
https://flask.palletsprojects.com/en/1.1.x/config/
Saludos amigos aqui les dejo un blog interesante acerca de las configuraciones de FLASK que de seguro les sera util:
estupendo, excelente u.u
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?