0
0
Flaskframework~20 mins

Extension initialization pattern in Flask - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Flask Extension Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this Flask extension initialization code?

Consider this Flask app using the extension initialization pattern. What will be printed when the app runs?

Flask
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
    db.init_app(app)

    @app.route('/')
    def index():
        return 'Hello, Flask!'

    with app.app_context():
        print(type(db.engine))

    return app

app = create_app()
A<class 'flask_sqlalchemy.SQLAlchemy'>
B<class 'sqlalchemy.engine.base.Engine'>
CNone
DAttributeError: 'SQLAlchemy' object has no attribute 'engine'
Attempts:
2 left
💡 Hint

Think about when the database engine is created in the extension initialization pattern.

state_output
intermediate
1:30remaining
What is the value of app.config['DEBUG'] after initialization?

Given this Flask app using the extension initialization pattern, what is the value of app.config['DEBUG'] after create_app() is called?

Flask
from flask import Flask
from flask_mail import Mail

mail = Mail()

def create_app():
    app = Flask(__name__)
    app.config['DEBUG'] = True
    mail.init_app(app)
    return app

app = create_app()
value = app.config['DEBUG']
ANone
BFalse
CTrue
DKeyError
Attempts:
2 left
💡 Hint

Extension initialization does not change existing config values.

📝 Syntax
advanced
2:00remaining
Which option correctly initializes a Flask extension with the factory pattern?

Choose the correct way to initialize a Flask extension using the extension initialization pattern (factory pattern).

A
db = SQLAlchemy()

app = Flask(__name__)
db.init_app(app)
B
db = SQLAlchemy(app)

app = Flask(__name__)

# extension initialized inline
C
app = Flask(__name__)
db = SQLAlchemy(app)

# extension initialized after app creation
D
app = Flask(__name__)
db = SQLAlchemy()

# extension initialized without init_app
Attempts:
2 left
💡 Hint

Extension initialization pattern separates extension creation and app binding.

🔧 Debug
advanced
2:30remaining
Why does this Flask app raise an error when accessing db.session?

Given this code, why does accessing db.session raise an error?

Flask
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'

@app.route('/')
def index():
    return str(db.session)

if __name__ == '__main__':
    app.run()
AFlask app context is missing when accessing db.session
BSQLALCHEMY_DATABASE_URI is invalid, causing session error
Cdb.session requires manual creation before use
Ddb.init_app(app) was not called, so db.session is uninitialized
Attempts:
2 left
💡 Hint

Check if the extension was properly linked to the app.

🧠 Conceptual
expert
3:00remaining
What is the main advantage of the Flask extension initialization pattern?

Why do Flask developers use the extension initialization pattern (creating extension instances outside the app and calling init_app later)?

AIt allows creating multiple Flask apps sharing the same extension instance without re-instantiating it
BIt improves runtime performance by caching extension objects globally
CIt automatically configures extensions without needing app context
DIt prevents extensions from being used outside the Flask app
Attempts:
2 left
💡 Hint

Think about app factories and multiple app instances.