Python > Web Development with Python > Flask > Blueprints
Flask Blueprints: Structuring Your Application
This snippet demonstrates how to use Flask Blueprints to organize a larger application into modular components. Blueprints allow you to register multiple routes, templates, and static files under a common prefix, making your code more maintainable and scalable.
What are Flask Blueprints?
Blueprints are a way to organize a group of related views and other code. Rather than registering views and other items directly with an application, they are registered with a blueprint. Then when the blueprint is registered on an application, the items within it are registered on the application. Blueprints are useful for:
Creating a Blueprint
This code creates a Blueprint named users
. The url_prefix
argument specifies that all routes defined in this Blueprint will be prefixed with /users
. The template_folder
argument specifies where the templates for this blueprint reside, relative to the blueprint's location. This ensures a modular structure for templates as well as routing.
from flask import Blueprint, render_template
# Create a Blueprint named 'users'
users_bp = Blueprint('users', __name__, url_prefix='/users', template_folder='templates/users')
@users_bp.route('/')
def list_users():
# Dummy data
users = ['Alice', 'Bob', 'Charlie']
return render_template('user_list.html', users=users)
@users_bp.route('/<username>')
def show_user(username):
return f'User profile for {username}'
Registering the Blueprint with the Application
This code shows how to register the users_bp
Blueprint with your Flask application. The app.register_blueprint()
function is used to register the Blueprint. Now, all routes defined in the Blueprint will be accessible under the /users
prefix.
from flask import Flask
app = Flask(__name__)
# Import the Blueprint
from .users import users_bp
# Register the Blueprint
app.register_blueprint(users_bp)
if __name__ == '__main__':
app.run(debug=True)
Directory Structure
To make this code runnable, you'd need the following directory structure: The
my_app/
__init__.py
app.py # Contains the Flask app and Blueprint registration
users.py # Contains the users blueprint
templates/
users/
user_list.html
user_list.html
file could contain something like this:
<html>
<body>
<h1>Users</h1>
<ul>
{% for user in users %}
<li><a href="{{ url_for('users.show_user', username=user) }}">{{ user }}</a></li>
{% endfor %}
</ul>
</body>
</html>
Real-Life Use Case Section
Imagine building an e-commerce application. You might use Blueprints for different sections like: Each Blueprint would encapsulate the logic and templates for its respective domain, making the application easier to manage and scale.products_bp
: Handling product listings, details, and search.users_bp
: Managing user profiles, authentication, and settings.orders_bp
: Processing orders, tracking shipments, and handling payments.
Best Practices
When to use them
Use blueprints when your application starts to grow in complexity and you need a way to structure your code into logical modules. They are particularly useful when you have distinct sections of your application with their own routes, templates, and static assets.
Pros
Cons
FAQ
-
How do I share data between Blueprints?
You can use Flask'sg
object or a database to share data between Blueprints. Alternatively, you can create a service layer that Blueprints can access. -
Can I nest Blueprints?
Yes, you can nest Blueprints by registering one Blueprint within another.