Configuración de la aplicación

Una aplicación Flask es una instancia de la clase Flask. Todo lo relacionado con la aplicación, como la configuración y las URL, se registrará en esta clase.

La forma más sencilla de crear una aplicación Flask es crear una instancia global Flask directamente en la parte superior de su código, como lo hizo el ejemplo «¡Hola, mundo!» en la página anterior. Aunque esto es simple y útil en algunos casos, puede causar algunos problemas complicados cuando el proyecto crece.

En lugar de crear una instancia de Flask globalmente, la crearás dentro de una función. Esta función se conoce como la fábrica de aplicaciones. Cualquier configuración, registro, y otros ajustes que la aplicación necesite ocurrirán dentro de la función, entonces la aplicación será devuelta.

La fábrica de aplicaciones

¡Es hora de empezar a codificar! Crea el directorio flaskr y añade el archivo __init__.py. El archivo __init__.py tiene una doble función: Contendrá la fábrica de la aplicación, y le dice a Python que el directorio flaskr debe ser tratado como un paquete.

$ mkdir flaskr
flaskr/__init__.py
import os

from flask import Flask


def create_app(test_config=None):
    # create and configure the app
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY='dev',
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )

    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.from_mapping(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # a simple page that says hello
    @app.route('/hello')
    def hello():
        return 'Hello, World!'

    return app

create_app es la función de fábrica de la aplicación. La añadirás más adelante en el tutorial, pero ya hace mucho.

  1. app = Flask(__name__, instance_relative_config=True) crea la instancia Flask.

    • __name__ es el nombre del módulo actual de Python. La aplicación necesita saber dónde se encuentra para establecer algunas rutas, y __name__ es una forma conveniente de decírselo.

    • instance_relative_config=True indica a la aplicación que los archivos de configuración son relativos a la carpeta instance. La carpeta de instancia se encuentra fuera del paquete flaskr y puede contener datos locales que no deben ser enviados al control de versiones, como los secretos de configuración y el archivo de base de datos.

  2. app.config.from_mapping() establece alguna configuración por defecto que la aplicación utilizará:

    • SECRET_KEY es utilizada por Flask y las extensiones para mantener los datos seguros. Se establece en 'dev' para proporcionar un valor conveniente durante el desarrollo, pero debe ser anulado con un valor aleatorio al liberar tu aplicación.

    • DATABASE es la ruta donde se guardará el archivo de la base de datos SQLite. Está bajo app.instance_path, que es la ruta que Flask ha elegido para la carpeta de la instancia. Aprenderás más sobre la base de datos en la siguiente sección.

  3. app.config.from_pyfile() anula la configuración por defecto con valores tomados del archivo config.py en la carpeta de la instancia si existe. Por ejemplo, al desplegar, esto puede usarse para establecer una SECRET_KEY real.

    • test_config también se puede pasar a la fábrica, y se utilizará en lugar de la configuración de la instancia. Esto es para que las pruebas que escribirás más adelante en el tutorial puedan ser configuradas independientemente de cualquier valor de desarrollo que hayas configurado.

  4. os.makedirs() asegura que app.instance_path existe. Flask no crea la carpeta de instancia automáticamente, pero es necesario crearla porque tu proyecto creará el archivo de base de datos SQLite allí.

  5. @app.route() crea una ruta simple para que puedas ver la aplicación funcionando antes de entrar en el resto del tutorial. Crea una conexión entre la URL /hello y una función que devuelve una respuesta, la cadena Hola, mundo en este caso.

Ejecutar la aplicación

Ahora puedes ejecutar tu aplicación usando el comando flask. Desde el terminal, dile a Flask dónde encontrar tu aplicación, y ejecútala en modo de desarrollo. Recuerda que debes estar en el directorio de nivel superior flask-tutorial, no en el paquete flaskr.

El modo de desarrollo muestra un depurador interactivo cada vez que una página lanza una excepción, y reinicia el servidor cada vez que haces cambios en el código. Puedes dejarlo funcionando y simplemente recargar la página del navegador mientras sigues el tutorial.

$ flask --app flaskr --env development run

Verás un resultado similar a este:

* Serving Flask app "flaskr"
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: nnn-nnn-nnn

Visita http://127.0.0.1:5000/hello en un navegador y deberías ver el mensaje «¡Hola, mundo!». Enhorabuena, ¡ya estás ejecutando tu aplicación web Flask!

Si otro programa ya está usando el puerto 5000, verás OSError: [Errno 98] o OSError: [WinError 10013] cuando el servidor intente iniciarse. Ver Dirección ya utilizada para saber cómo manejar esto.

Continuar con Definir y acceder a la base de datos.