Estructura de proyectos Flask
Una aplicación Flask puede ser tan simple como tener un solo archivo.
Por ejemplo, el siguiente archivo hello.py es una aplicación Flask:
Ejemplo
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
Sin embargo, cuando el proyecto crece, no es realista poner todo el código en un solo archivo.
La estructura de proyectos Flask puede variar según el tamaño y la complejidad de la aplicación.
A continuación se presentan varias estructuras comunes de proyectos Flask, adecuadas para aplicaciones simples y aplicaciones más complejas.
- Estructura de proyecto simple: Adecuada para aplicaciones pequeñas, todo el código se concentra en un solo archivo.
- Estructura de proyecto mediana: Divide la aplicación en varios módulos para facilitar la gestión y la expansión.
- Estructura de proyecto compleja: Admite una mayor modularidad, adecuada para aplicaciones grandes, incluye rutas, modelos, plantillas y directorios de archivos estáticos.
1. Estructura de proyecto simple
Para una aplicación Flask simple, la estructura del proyecto puede ser muy concisa:
my_flask_app/ │ ├── app.py └── requirements.txt
app.py: Archivo principal de la aplicación Flask, contiene la definición de rutas y funciones de vista.requirements.txt: Lista las bibliotecas de dependencias del proyecto, se utiliza para registrar la información de versiones de Flask y otros paquetes.
Código del archivo app.py en el directorio my_flask_app:
Ejemplo
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True)
Ejemplo de requirements.txt:
Flask==2.2.3
2. Estructura de proyecto mediana
Para aplicaciones un poco más complejas, normalmente se divide el proyecto en varios módulos y directorios:
my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── routes.py │ └── models.py │ ├── config.py ├── requirements.txt └── run.py
app/: Contiene el código principal de la aplicación Flask.__init__.py: Inicializa la aplicación Flask y configura las extensiones.routes.py: Define las rutas y las funciones de vista de la aplicación.models.py: Define los modelos de datos de la aplicación.
config.py: Archivo de configuración, contiene la información de configuración de la aplicación.requirements.txt: Lista las bibliotecas de dependencias del proyecto.run.py: Se utiliza para iniciar la aplicación Flask.
Ejemplo de app/__init__.py:
Ejemplo
def create_app():
app = Flask(__name__)
app.config.from_object('config.Config')
from . import routes
app.register_blueprint(routes.bp)
return app
Ejemplo de app/routes.py:
Ejemplo
bp = Blueprint('main', __name__)
@bp.route('/')
def home():
return 'Hello, World!'
Ejemplo de run.py:
Ejemplo
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
3. Estructura de proyecto compleja
Para aplicaciones más grandes, puede ser necesaria una estructura de proyecto más compleja para admitir una mayor modularidad y escalabilidad:
my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── routes/ │ │ ├── __init__.py │ │ ├── main.py │ │ └── auth.py │ ├── models/ │ │ ├── __init__.py │ │ └── user.py │ ├── templates/ │ │ ├── layout.html │ │ └── home.html │ └── static/ │ ├── css/ │ └── js/ │ ├── config.py ├── requirements.txt ├── migrations/ │ └── ... └── run.py
app/routes/: Gestiona por separado las rutas de los diferentes módulos funcionales.main.py: Rutas del módulo principal.auth.py: Rutas relacionadas con la autenticación.
app/models/: Gestiona los modelos de datos, normalmente relacionado con operaciones de base de datos.user.py: Modelo de usuario.
app/templates/: Almacena los archivos de plantillas HTML.app/static/: Almacena archivos estáticos, como CSS y JavaScript.migrations/: Archivos de migración de base de datos, normalmente relacionados con SQLAlchemy.
Ejemplo de app/routes/main.py:
Ejemplo
bp = Blueprint('main', __name__)
@bp.route('/')
def home():
return render_template('home.html')
Ejemplo de app/models/user.py:
Ejemplo
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(150), unique=True, nullable=False)