Bird
Raised Fist0
Flaskframework~20 mins

Blueprint best practices in Flask - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Blueprint Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
1:30remaining
Blueprint URL Prefix Behavior
Consider a Flask Blueprint registered with a URL prefix. What will be the full URL path for a route defined as @bp.route('/dashboard') if the blueprint is registered with url_prefix='/admin'?
Flask
from flask import Blueprint
bp = Blueprint('admin', __name__, url_prefix='/admin')

@bp.route('/dashboard')
def dashboard():
    return 'Admin Dashboard'
A/admin/dashboard
B/dashboard
C/admin
D/dashboard/admin
Attempts:
2 left
💡 Hint
Think about how the url_prefix combines with route paths.
📝 Syntax
intermediate
1:30remaining
Correct Blueprint Registration Syntax
Which option correctly registers a blueprint named auth in a Flask app instance app?
Flask
from flask import Flask, Blueprint
app = Flask(__name__)
auth = Blueprint('auth', __name__)

# Registration code here
Aapp.register_blueprint(auth)
Bapp.register_blueprint('auth')
Capp.register_blueprint(auth, url_prefix='/auth')
Dapp.register_blueprint('auth', url_prefix='/auth')
Attempts:
2 left
💡 Hint
The first argument must be the blueprint object, not a string.
🔧 Debug
advanced
2:00remaining
Blueprint Import Error Debugging
You have a Flask app with multiple blueprints in separate files. When running the app, you get an ImportError related to circular imports. What is the best practice to avoid this issue?
Flask
File structure:
- app.py
- auth.py (defines auth blueprint)
- dashboard.py (defines dashboard blueprint)

Both auth.py and dashboard.py import app.py and each other.
AImport blueprints inside functions or after app creation to avoid circular imports.
BRemove all imports between blueprint files and put all routes in app.py.
CUse global variables to share app instance across files.
DRename blueprint files to avoid import conflicts.
Attempts:
2 left
💡 Hint
Think about when imports happen and how to delay them.
❓ state_output
advanced
2:00remaining
Blueprint Template Folder Resolution
If a blueprint is created with Blueprint('shop', __name__, template_folder='templates') and the app renders a template with render_template('index.html') inside a blueprint route, where does Flask look for index.html?
Flask
shop = Blueprint('shop', __name__, template_folder='templates')

@shop.route('/')
def home():
    return render_template('index.html')
AIn the app's main templates folder only.
BIn both the app's templates folder and blueprint's templates folder, app folder takes priority.
CFlask raises a TemplateNotFound error because path is ambiguous.
DIn the blueprint's 'templates' folder relative to the blueprint file.
Attempts:
2 left
💡 Hint
Blueprints can have their own templates folder.
🧠 Conceptual
expert
2:30remaining
Blueprints and Application Factory Pattern
Why is it a best practice to register blueprints inside the application factory function rather than at the global level in a Flask app?
AIt prevents blueprints from being used outside the app context.
BIt allows creating multiple app instances with different configurations and avoids circular imports.
CIt automatically registers blueprints with URL prefixes without extra code.
DIt improves the app's runtime speed by preloading blueprints.
Attempts:
2 left
💡 Hint
Think about app creation and flexibility.

Practice

(1/5)
1. What is the main purpose of using a Blueprint in a Flask application?
easy
A. To organize routes and views into reusable components
B. To connect Flask with a database
C. To handle user authentication automatically
D. To serve static files like images and CSS

Solution

  1. Step 1: Understand Blueprint role

    A Blueprint helps split a Flask app into smaller parts for better organization.
  2. Step 2: Compare options

    Only To organize routes and views into reusable components describes organizing routes and views, which is the Blueprint's purpose.
  3. Final Answer:

    To organize routes and views into reusable components -> Option A
  4. Quick Check:

    Blueprint = organize routes [OK]
Hint: Blueprints group routes for modular apps [OK]
Common Mistakes:
  • Confusing Blueprints with database connectors
  • Thinking Blueprints handle authentication
  • Assuming Blueprints serve static files
2. Which of the following is the correct way to register a Blueprint named auth with a URL prefix /auth in a Flask app?
easy
A. auth.register_blueprint(app, url_prefix='/auth')
B. app.register_blueprint('/auth', auth)
C. app.add_blueprint(auth, prefix='/auth')
D. app.register_blueprint(auth, url_prefix='/auth')

Solution

  1. Step 1: Recall Blueprint registration syntax

    The correct method is app.register_blueprint(blueprint, url_prefix='...').
  2. Step 2: Match options

    Only app.register_blueprint(auth, url_prefix='/auth') uses the correct method and argument order.
  3. Final Answer:

    app.register_blueprint(auth, url_prefix='/auth') -> Option D
  4. Quick Check:

    Register Blueprint with url_prefix = C [OK]
Hint: Use app.register_blueprint(blueprint, url_prefix=...) [OK]
Common Mistakes:
  • Swapping argument order in register_blueprint
  • Using non-existent methods like add_blueprint
  • Calling register_blueprint on the Blueprint instead of app
3. Given this Blueprint code:
from flask import Blueprint
bp = Blueprint('bp', __name__, url_prefix='/items')

@bp.route('/')
def list_items():
    return 'List of items'

What URL path will show the text 'List of items' when this Blueprint is registered with app.register_blueprint(bp)?
medium
A. /bp/
B. /
C. /items/
D. /items/list_items

Solution

  1. Step 1: Understand url_prefix effect

    The Blueprint has url_prefix='/items', so all routes start with '/items'.
  2. Step 2: Check route decorator

    The route is @bp.route('/'), so it adds '/' after the prefix.
  3. Final Answer:

    /items/ -> Option C
  4. Quick Check:

    url_prefix + route = /items/ [OK]
Hint: URL = url_prefix + route path [OK]
Common Mistakes:
  • Ignoring url_prefix and using route path alone
  • Using Blueprint name as URL prefix
  • Assuming function name affects URL path
4. What is wrong with this Blueprint registration code?
from flask import Flask, Blueprint
app = Flask(__name__)
bp = Blueprint('bp', __name__)

@bp.route('/hello')
def hello():
    return 'Hello!'

app.register_blueprint(bp, url_prefix='/greet')

if __name__ == '__main__':
    app.run()
medium
A. Nothing is wrong; the code works correctly
B. The Blueprint must be registered before defining routes
C. The url_prefix argument is invalid for register_blueprint
D. The Blueprint name 'bp' conflicts with the app name

Solution

  1. Step 1: Check Blueprint usage

    The Blueprint is created, routes defined, then registered with url_prefix correctly.
  2. Step 2: Validate code correctness

    All syntax and order are valid; no conflicts or errors exist.
  3. Final Answer:

    Nothing is wrong; the code works correctly -> Option A
  4. Quick Check:

    Blueprint registration order and syntax = correct [OK]
Hint: Define routes before registering Blueprint [OK]
Common Mistakes:
  • Trying to register Blueprint before defining routes
  • Misusing url_prefix argument
  • Assuming Blueprint name conflicts with app
5. You have two Blueprints, admin_bp with url_prefix='/admin' and user_bp with url_prefix='/user'. Both define a route @bp.route('/dashboard'). What is the best practice to avoid URL conflicts and keep your app organized?
hard
A. Merge both Blueprints into one to avoid route duplication
B. Use distinct url_prefixes for each Blueprint and register both in the main app
C. Remove url_prefix and use unique route names instead
D. Register only one Blueprint to prevent conflicts

Solution

  1. Step 1: Understand route conflicts

    Both Blueprints have the same route path '/dashboard', which would conflict if url_prefixes overlap or are missing.
  2. Step 2: Use url_prefix to separate routes

    Assigning distinct url_prefixes like '/admin' and '/user' keeps routes separate and organized.
  3. Step 3: Register both Blueprints in main app

    Registering both with their prefixes activates their routes without conflict.
  4. Final Answer:

    Use distinct url_prefixes for each Blueprint and register both in the main app -> Option B
  5. Quick Check:

    Distinct url_prefixes prevent route conflicts [OK]
Hint: Separate routes with unique url_prefixes [OK]
Common Mistakes:
  • Merging Blueprints unnecessarily
  • Removing url_prefix causing route clashes
  • Registering only one Blueprint losing functionality
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard