Strutturare un'app Flask in modo modulare

Quando si sviluppa un'applicazione Flask di dimensioni medio-grandi, è fondamentale strutturarla in modo modulare. Questo approccio consente di migliorare la manutenibilità, la scalabilità e la leggibilità del codice. In questo articolo vedremo come suddividere un'app Flask in moduli usando i Blueprint.

1. Struttura base del progetto

Una possibile struttura modulare potrebbe essere la seguente:


myapp/
│
├── app/
│   ├── __init__.py
│   ├── routes/
│   │   ├── __init__.py
│   │   ├── users.py
│   │   └── posts.py
│   ├── models/
│   │   ├── __init__.py
│   │   └── user.py
│   └── templates/
│       └── ...
│
├── config.py
└── run.py

2. Inizializzazione dell'app

Nel file app/__init__.py si crea e configura l'istanza dell'app Flask:


from flask import Flask

def create_app():
    app = Flask(__name__)
    app.config.from_pyfile('../config.py')

    from .routes import register_blueprints
    register_blueprints(app)

    return app

3. Registrazione dei Blueprint

Nel file app/routes/__init__.py si centralizza la registrazione dei blueprint:


from .users import users_bp
from .posts import posts_bp

def register_blueprints(app):
    app.register_blueprint(users_bp)
    app.register_blueprint(posts_bp)

4. Esempio di Blueprint

Nel file app/routes/users.py si definisce un blueprint dedicato alle rotte degli utenti:


from flask import Blueprint, render_template

users_bp = Blueprint('users', __name__, url_prefix='/users')

@users_bp.route('/')
def user_index():
    return render_template('users/index.html')

5. Avvio dell'app

Nel file run.py si avvia l'applicazione:


from app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True)

Conclusione

Organizzare un'app Flask in modo modulare aiuta a mantenere il progetto ordinato e facilmente estendibile. Utilizzando i Blueprint è possibile separare le varie funzionalità in moduli indipendenti e riutilizzabili.

Torna su