📖 Scenario: You are building a simple Flask web application that has two parts: a main page and a user page. To keep your code organized, you will use Flask Blueprints to separate these parts.
🎯 Goal: Create two Flask Blueprints named main_bp and user_bp. Register them in the Flask app with URL prefixes. Each Blueprint should have one route that returns a simple message.
📋 What You'll Learn
Create a Flask app instance named app
Create a Blueprint named main_bp with the name 'main' and import name __name__
Create a Blueprint named user_bp with the name 'user' and import name __name__
Add a route / to main_bp that returns the string 'Welcome to the main page!'
Add a route /profile to user_bp that returns the string 'User profile page'
Register main_bp with the Flask app with URL prefix '' (no prefix)
Register user_bp with the Flask app with URL prefix /user
💡 Why This Matters
🌍 Real World
Blueprints help organize large Flask apps by grouping related routes and code, making the app easier to maintain.
💼 Career
Understanding Blueprints is essential for backend developers working with Flask to build scalable and clean web applications.
Progress0 / 4 steps
1
Create the Flask app and main Blueprint
Import Flask and Blueprint from flask. Create a Flask app instance called app. Create a Blueprint called main_bp with the name 'main' and import name __name__.
Flask
Hint
Use app = Flask(__name__) to create the app. Use Blueprint('main', __name__) to create the main blueprint.
2
Create the user Blueprint
Create a Blueprint called user_bp with the name 'user' and import name __name__.
Flask
Hint
Use Blueprint('user', __name__) to create the user blueprint.
3
Add routes to the Blueprints
Add a route / to main_bp that returns the string 'Welcome to the main page!'. Add a route /profile to user_bp that returns the string 'User profile page'.
Flask
Hint
Use @main_bp.route('/') and @user_bp.route('/profile') decorators to add routes.
4
Register Blueprints with the Flask app
Register main_bp with the Flask app using app.register_blueprint(main_bp, url_prefix=''). Register user_bp with the Flask app using app.register_blueprint(user_bp, url_prefix='/user').
Flask
Hint
Use app.register_blueprint() to connect blueprints to the app with the correct URL prefixes.
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
Step 1: Understand Blueprint role
A Blueprint helps split a Flask app into smaller parts for better organization.
Step 2: Compare options
Only To organize routes and views into reusable components describes organizing routes and views, which is the Blueprint's purpose.
Final Answer:
To organize routes and views into reusable components -> Option A
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
Step 1: Recall Blueprint registration syntax
The correct method is app.register_blueprint(blueprint, url_prefix='...').
Step 2: Match options
Only app.register_blueprint(auth, url_prefix='/auth') uses the correct method and argument order.
Final Answer:
app.register_blueprint(auth, url_prefix='/auth') -> Option D
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
Step 1: Understand url_prefix effect
The Blueprint has url_prefix='/items', so all routes start with '/items'.
Step 2: Check route decorator
The route is @bp.route('/'), so it adds '/' after the prefix.
Final Answer:
/items/ -> Option C
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
Step 1: Check Blueprint usage
The Blueprint is created, routes defined, then registered with url_prefix correctly.
Step 2: Validate code correctness
All syntax and order are valid; no conflicts or errors exist.
Final Answer:
Nothing is wrong; the code works correctly -> Option A
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
Step 1: Understand route conflicts
Both Blueprints have the same route path '/dashboard', which would conflict if url_prefixes overlap or are missing.
Step 2: Use url_prefix to separate routes
Assigning distinct url_prefixes like '/admin' and '/user' keeps routes separate and organized.
Step 3: Register both Blueprints in main app
Registering both with their prefixes activates their routes without conflict.
Final Answer:
Use distinct url_prefixes for each Blueprint and register both in the main app -> Option B