Skip to content

Flask Extensions Overview

Flask stays minimal by design.

Extensions add features like:

  • databases (Flask-SQLAlchemy)
  • migrations (Flask-Migrate)
  • login/session management (Flask-Login)
  • forms (Flask-WTF)
  • mail, caching, rate limiting, etc.

The extension pattern

Most extensions support this pattern:

# extensions.py
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
 
 
db = SQLAlchemy()
login_manager = LoginManager()
# extensions.py
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
 
 
db = SQLAlchemy()
login_manager = LoginManager()

Then inside your factory:

from .extensions import db, login_manager
 
db.init_app(app)
login_manager.init_app(app)
from .extensions import db, login_manager
 
db.init_app(app)
login_manager.init_app(app)

Why this matters

It avoids circular imports and allows:

  • creating multiple app instances
  • independent testing

Common extensions

  • Flask-Login
  • Flask-WTF
  • Flask-Migrate
  • Flask-Mail
  • Flask-Admin
  • Flask-Limiter (rate limiting)
  • Flask-Caching

Pick extensions carefully and keep them consistent with your architecture.

If this helped you, consider buying me a coffee ☕

Buy me a coffee

Was this page helpful?

Let us know how we did