NelsonLabs
Flask/Blueprints & App Structure

Blueprints & App Structure

Blueprints are Flask's way to organise a larger application into modular components β€” equivalent to Django's apps. Each blueprint handles one area of the application.

Application structure with Blueprints
bash
myapp/
β”œβ”€β”€ app.py           # or __init__.py if using a package
β”œβ”€β”€ config.py
β”œβ”€β”€ models.py
β”œβ”€β”€ extensions.py    # db, migrate, etc.
└── blueprints/
    β”œβ”€β”€ auth/
    β”‚   β”œβ”€β”€ __init__.py
    β”‚   β”œβ”€β”€ routes.py
    β”‚   └── forms.py
    β”œβ”€β”€ api/
    β”‚   β”œβ”€β”€ __init__.py
    β”‚   └── routes.py
    └── main/
        β”œβ”€β”€ __init__.py
        └── routes.py
Creating and registering a Blueprint
python
# blueprints/api/__init__.py
from flask import Blueprint

api = Blueprint("api", __name__, url_prefix="/api")

from . import routes  # import routes to register them

# blueprints/api/routes.py
from flask import jsonify
from . import api
from models import Course

@api.route("/courses")
def get_courses():
    courses = Course.query.filter_by(is_live=True).all()
    return jsonify([c.to_dict() for c in courses])

@api.route("/courses/<int:id>")
def get_course(id):
    course = Course.query.get_or_404(id)
    return jsonify(course.to_dict())

# app.py β€” register blueprints
from flask import Flask
from blueprints.api import api
from blueprints.auth import auth
from blueprints.main import main

def create_app():
    app = Flask(__name__)
    app.config.from_object("config.Config")

    db.init_app(app)

    app.register_blueprint(api)
    app.register_blueprint(auth)
    app.register_blueprint(main)

    return app