Use the Application Factory pattern (create_app) with Blueprints for configurable Flask apps.
Application Factory Pattern
# app/__init__.py
from flask import Flask
from .extensions import db, migrate, login_manager
def create_app(config_name="default"):
app = Flask(__name__)
app.config.from_object(config[config_name])
# Init extensions
db.init_app(app)
migrate.init_app(app, db)
login_manager.init_app(app)
# Register blueprints
from .auth import auth_bp
from .main import main_bp
from .api import api_bp
app.register_blueprint(auth_bp, url_prefix="/auth")
app.register_blueprint(main_bp)
app.register_blueprint(api_bp, url_prefix="/api")
return app
# run.py
from app import create_app
app = create_app()
if __name__ == "__main__":
app.run(debug=True)