Flask interview question · Most asked

What is the application factory pattern in Flask and why use it?

Summary

An application factory is a create_app(config=None) function that creates and configures the Flask instance, initializes extensions and registers blueprints, instead of creating a global app at import time.

Longer Answer

Benefits: multiple app instances with different configs (tests vs production), no circular imports (extensions are created unbound and attached with init_app), and no side effects at import. flask --app 'myapp:create_app()' run and Gunicorn ('myapp:create_app()') both support factories.

Code Example

# myapp/__init__.py
from flask import Flask
from .extensions import db, migrate, login_manager

def create_app(config_object: str = "myapp.config.ProdConfig") -> Flask:
    app = Flask(__name__)
    app.config.from_object(config_object)

    db.init_app(app)
    migrate.init_app(app, db)
    login_manager.init_app(app)

    from .auth import bp as auth_bp
    from .orders import bp as orders_bp
    app.register_blueprint(auth_bp, url_prefix="/auth")
    app.register_blueprint(orders_bp, url_prefix="/orders")
    return app

Key Points

  • create_app() returns a configured app
  • Extensions use ext.init_app(app)
  • Easy test configuration
  • Avoids circular imports

Explanation

What interviewers look for

Linking the factory to testability and the init_app extension pattern.

Follow-up questions

  • How do extensions access the app inside a factory?

More most-asked Flask questions

← All Flask questions