Skip to content

Aplicación Base

En la siguiente guía se va a explicar sobre la aplicación base brindada por la cátedra.

Versiones en el Server

  • Python: 3.8.10
  • MariaDB (MySQL): 10.3.31

Requsitos

  • Tener instalado Python en su sistema. Con las librerías pip y virtualenv
  • Tener instalada de forma local una base de datos MySQL o MariaDB.

Dependencias

Las dependencias del proyecto se encuentran en el archivo requirements.txt:

  • Flask v2.0.1 -> web framework
  • PyMysql v1.0.2 -> conexión a la base
  • Flask-Session v0.4 -> sesiones almacenadas en el servidor
  • black v21.9b0 -> formateador de código

Cuando vayan agregando nuevas dependencias con el manejador de paquetes de python (pip), es necesario que se vayan agregando en archivo para que luego sus compañeros/as o en producción puedan instalarse las mismas. Se pueden ingresar editando el archivo y guardándolo 'paquete'=='numero de versión' como por ejemplo Flask==2.0.1. Para más ejemplos revisar el archivo requirements.txt en la aplicación template.

Archivos y directorios importantes

En el raíz de nuestra template van a encontrar los siguientes archivos y directorios:

Directorio raíz

$ tree -L 1
.
├── app              # directorio principal de código.
├── config.py        # módulo de configuración de la aplicación.
├── db               # directorio con dump inicial de la base de datos.
├── README.md
├── requirements.txt # listado de dependencias.
└── run.py           # entry point.

App

tree -L 2
.
├── app
│   ├── __init__.py  # módulo principal.
│   ├── db.py        # módulo de conexión con la base de datos.
│   ├── helpers      # directorio con funciones auxiliares.
│   ├── models       # directorio con los modelos (Models).
│   ├── resources    # directorio de los controladores (Controllers).
│   ├── static       # directorio de archivos estáticos.
│   └── templates    # directorio de templates (Views).
├── config.py
├── db
│   └── schema.sql
├── README.md
├── requirements.txt
└── run.py

Archivo __init__.py

Este es el archivo principal de la aplicación que la inicializa y la configura. En las misma se encuentra una función llamada create_app que realiza toda la configuración:

  • Crea la aplicación flask.
  • Levanta la configuración desde el módulo config.py según el environment.
  • Configura las sesiones, la base de datos y el motor de templates.
  • Configura todas las rutas de la aplicación.
  • Se registran los manejadores en caso de error.

Resources

Este directorio tiene los controladores de la aplicación. Los controladores tiene lógica de la aplicación relacionada con la web. Hace de enlace entre la lógica de aplicación y la de generación de las vistas. En el subdirectorio /api se encuentran los controladores que devuelven los recursos en formato json.

Models

Aquí se encuentra el código referido a la lógica de aplicación concreta. En general son lo modelos que interactúan con la base de datos y realizan lógica de negocio.

Templates

Directorio de los archivos de template de Jinja2. En general se suele crear un subdirectorio por cada uno de los controladores creados en resources. Seria como las vistas en el modelo MVC.

Helpers

Es el directorio que tiene funciones auxiliares de la aplicación. Generalmente aquí se encuentra el código que no son parte principal del negocio de la aplicación pero que se usan en distintas partes del código.

En este caso se pueden ver funciones para el manejo de los errores dentro del archivo handler.py y en auth.py tenemos una función para la verificación de sesión.

Static

Aquí se colocan los archivos estáticos y que queremos que puedan ser accedidos públicamente en nuestra aplicación, como pueden ser hojas de estilo, scripts js e imágenes.

Configuración

El módulo de configuración se encuentra en el archivo config.py. El mismo contiene una clase para cada uno de los entornos de ejecución de la aplicación o enviroments.

En la clase DevelopmentConfig se debe configurar los parámetros para la ejecución local de cada desarrollador. La clase está preparada para que cada desarrollador agregue en variables de entorno los valores particulares de cada entorno local.

En ProductionConfig se colocan los valores para ejecutar la aplicación en el entorno del server remoto. También esta preparada para tomar los valores de variables de entorno, pero en este caso se debe agregar como valores por default los datos que se les otorgaron de la base. Esto último es muy importante dado que en el servidor no se encuentran a agregadas las variables de entorno.

Ejecución

La ejecución de la aplicación se realiza desde el archivo run.py que instancia la aplicación y la ejecuta.

from app import create_app

if __name__ == "__main__":
    app = create_app()
    app.run()

Es necesario para la correcta ejecución configurar la variable de entorno FLASK_ENV que se toma como parámetro para realizar la carga de la configuración de nuestra aplicación. Para ejecutar el ambiente local como ambiente de desarrollo la manera seria la siguiente: FLASK_ENV=development python run.py

¿Cómo usar el template?

  • Descargar del repositorio el último tag o clonarlo desde el repositorio.
  • Copiar los archivos de la aplicacion template a dentro del respositorio de su proyecto (si tienen visibles los archivos ocultos, no hay que copiar el directorio .git aunque sí es recomendable copiar el archivo .gitignore).
  • Cargar el archivo db/schema.sql en su base de datos local. Es importante cargar este archivo sino la aplicacion no funcionara. Para eso pueden utilizar un cliente de base de datos como por ejemplo: phpMyAdmin o mysql workbench o la misma command line de mysql:
mysql -h "host" -u "user" -p "password" "database" < db/schema.sql
  • Configurar correctamente la clase DevelopmentConfig con los valores del entorno local del proyecto.
  • Crear un entorno virtual dentro de nuestro proyecto es necesario ejecutar lo siguiente:
virtualenv venv
  • Activar nuestro entorno virtual:
source venv/bin/activate
  • Instalar los paquetes de nuestra aplicación:
pip install -r requirements.txt
  • Para ejecutar la aplicación indicando el entorno:
FLASK_ENV=development python run.py

Alternativa:

FLASK_ENV=development flask run
 * Serving Flask app "app" (lazy loading)
 * 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: 112-188-961

El proyecto queda ejecutandose en el puerto 5000, en un navegador acceder a http://localhost:5000