Blueprints help organize your Flask app into smaller parts. This makes your code easier to manage and reuse.
You want to split a large app into smaller sections like user accounts and blog posts.
You need to reuse parts of your app in different projects.
You want to keep your routes and views organized by feature.
You want to separate API routes from web page routes.
You want to make your app easier to test and maintain.
Syntax
Flask
from flask import Blueprint
bp = Blueprint('name', __name__, url_prefix='/prefix')
@bp.route('/path')
def view_func():
return'Hello from blueprint!'# In main app filefrom flask import Flask
from your_blueprint_file import bp
app = Flask(__name__)
app.register_blueprint(bp)
The first argument to Blueprint is its name, used internally.
url_prefix adds a prefix to all routes in the blueprint.
Examples
This blueprint handles user-related routes under '/users'.
Flask
bp = Blueprint('users', __name__, url_prefix='/users')
@bp.route('/')
def users_home():
return'Users Home'
This blueprint is for API routes, returning JSON data.
This app uses a blueprint to handle blog routes. The blog homepage is at '/blog/' and individual posts at '/blog/post/<id>'.
Flask
from flask import Flask, Blueprint
# Create a blueprint for blog
blog_bp = Blueprint('blog', __name__, url_prefix='/blog')
@blog_bp.route('/')
def blog_home():
return'Welcome to the Blog!'
@blog_bp.route('/post/<int:id>')
def show_post(id):
return f'Post number {id}'# Create main app
app = Flask(__name__)
app.register_blueprint(blog_bp)
if __name__ == '__main__':
app.run(debug=True)
OutputSuccess
Important Notes
Always give your blueprint a unique name to avoid conflicts.
Use url_prefix to keep routes organized and avoid clashes.
Register blueprints before running the app.
Summary
Blueprints help split your app into smaller, manageable parts.
Use url_prefix to group related routes under a common path.
Register blueprints in your main app to activate their routes.
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