Los archivos de configuración en Flask nos permiten agregar parámetros globales a nuestro proyecto; habilitar el modo testing, debug, colocar la clave secreta de la app empleada por ejemplo para la encriptación de datos entre otros muchas configuraciones que puedes agregar en Flask.
Flask nos provee algunos mecanismos con los cuales podemos manejar parámetros de configuración de nuestro proyecto, por ejemplo ambiente, base de datos, conexiones a servicios de terceros, etc.
Estas configuraciones se hacen en archivos de configuración en Flask nos permiten agregar parámetros globales a nuestro proyecto; habilitar el modo testing, debug, colocar la clave secreta de la app empleada por ejemplo para la encriptación de datos entre otros muchas configuraciones que puedes agregar en Flask.
La configuración en Flask es o una clase/subclase o simplemente un diccionario y puede ser modificada de manera programática y en tiempo de ejecución desde nuestro proyecto en Flask; por ejemplo, fíjate en las siguientes líneas de código en donde estamos cambiando programáticamente el modo debug a true, y lo hacemos mediante un arranque de configuración o simplemente un diccionario y de esta manera podemos emplear el objeto de config en Flask de manera programática:
app = Flask(__name__)
app.config['DEBUG'] = True
app.debug = True
Configuración en base a variables de entorno
Como hablamos en el artículo anterior, nosotros también contamos con configuraciones que podemos emplear como variables de entorno:
DEBUG = True
TESTING = True
Por ejemplo, para modificar el ambiente desde una variable de entorno:
export FLASK_ENV=development flask run
Parámetros de Configuración basadas en clases u objetos
Este viene siendo el enfoque más completo y organizado y por lo tanto es el recomendado que empleamos en nuestro curso; ya que, como vamos a ver, nos ofrece la posibilidad de emplear distintas configuraciones según el ambiente que nos encontremos, podemos realizar distintos parámetros de configuraciones en base a clases, lo cual es un mecanismo muy interesante que tenemos para tener configuraciones de todo tipo, y para distintos ambientes de desarrollo.
Simplemente creamos un archivo con cualquier nombre y extensión de .py y agregamos una clase; por ejemplo un archivo llamado configuration.py
; por ejemplo, en nuestro curso de Flask, empleamos la siguiente configuración:
class BaseConfig(object):
USER_APP_NAME = 'FlaskMalcen'
USER_ENABLE_EMAIL = True
'Base configuracion'
SECRET_KEY = 'Key'
DEBUG = True
TESTING = False
SQLALCHEMY_DATABASE_URI="mysql+pymysql://root:root@localhost:3306/pyalmacen2"
RECAPTCHA_PUBLIC_KEY='6LffHtEUAAAAAI_KcKj6Au3R-bwhqRhPGe-WhHq_'
RECAPTCHA_PRIVATE_KEY='6LffHtEUAAAAAJdHhV9e8yLOSB12rm8WW8CMxN7X'
BABEL_TRANSLATION_DIRECTORIES='/Users/andrescruz/Desktop/flask/4_flask_app/flask_app/translations'
#WTF_CSRF_TIME_LIMIT = 10
class ProductionConfig(BaseConfig):
'Produccion configuracion'
DEBUG = False
class DevelopmentConfig(BaseConfig):
'Desarrollo configuracion'
DEBUG = True
TESTING = True
SECRET_KEY = 'Desarrollo key'
#MAIL_SUPPRESS_SEND = False
MAIL_SERVER = "smtp.mailtrap.io"
MAIL_PORT = 2525
MAIL_USERNAME="xxx"
MAIL_PASSWORD="xxx"
#MAIL_DEFAULT_SENDER=('andres de DL',"andres@gmail.com")
MAIL_USE_TLS=True
MAIL_USE_SSL=False
USER_EMAIL_SENDER_EMAIL="andres@gmail.com"
CACHE_TYPE = "simple"
Definir parámetros de configuración empleando herencia entre clases
Ahora, supongamos que vamos a definir una clase base para realizar las configuraciones iniciales o de base que queremos que tenga el proyecto, y con esto podemos heredarlo a otras clases que vendrán siendo los distintos ambientes o modos que queramos que tenga nuestra aplicación.
Para cargarlo en nuestra app, y por lo tanto que nuestro proyecto pueda emplear estas configuraciones; por ejemplo, el modo de desarrollo:
app.config.from_object('configuration.DevelopmentConfig')
O el de producción:
app.config.from_object('configuration.ProductionConfig')
Lo interesante de esto, es que nosotros podemos fácilmente emplear configuraciones comunes que son las que tenemos en nuestra clase llamada BaseConfig y podemos heredarlas a otras clases que son las que empleamos para indicar los distintos modos de nuestra aplicación y este es el que empleamos en el curso sobre Flask.
Extra: Cargar configuraciones de manera dinámica
Muchas veces, necesitamos obtener datos dinámicos para crear la configuración; por ejemplo, para la carpeta de carga de archivos: perfectamente podemos definirlo en el init de nuestra app:
app.config['UPLOAD_FOLDER'] = os.path.realpath('.') + '/my_app/static/uploads
Como puedes ver, esta es la versión más completa que puedes escoger al momento de desarrollar tus configuraciones el Flask, ya que podemos variar fácilmente entre un ambiente a otro, activando o desactivando ciertas configuraciones de manera automática con tan solo cambiar una línea de código.
Te dejo la documentación oficial para más detalle.
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter