Blueprints in Flask
Introduction
As Flask applications grow, managing a large codebase can become challenging. Blueprints provide a way to organize and modularize routes, templates, and static files into smaller, reusable components.
Step 1: Setting Up Flask
Start by installing Flask:
pip install flask
Create the main Flask application file:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Welcome to the Main App!'
if __name__ == '__main__':
app.run(debug=True)
Step 2: Creating a Blueprint
Create a new folder for your blueprint, for example, auth. Inside this folder, create a Python file named routes.py:
from flask import Blueprint
auth = Blueprint('auth', __name__)
@auth.route('/login')
def login():
return 'Login Page'
@auth.route('/logout')
def logout():
return 'Logout Page'
@auth.route('/signup')
def signup():
return 'Signup Page'
Here, we define an auth blueprint to handle authentication-related routes.
Step 3: Registering the Blueprint
Register the blueprint in your main application:
from flask import Flask
from auth.routes import auth
app = Flask(__name__)
# Register the auth blueprint
app.register_blueprint(auth, url_prefix='/auth')
@app.route('/')
def home():
return 'Welcome to the Main App!'
if __name__ == '__main__':
app.run(debug=True)
The url_prefix='/auth' ensures that all routes in the auth blueprint are prefixed with /auth.
Step 4: Organizing Templates and Static Files
Within the auth folder, create subfolders for templates and static files:
auth/
├── routes.py
├── templates/
│ └── auth/
│ └── login.html
└── static/
└── auth/
└── style.css
Update the routes.py to render templates:
from flask import Blueprint, render_template
auth = Blueprint('auth', __name__, template_folder='templates', static_folder='static')
@auth.route('/login')
def login():
return render_template('auth/login.html')
Step 5: Adding Static Files
Create a CSS file in the static/auth folder. For example, style.css:
body {
font-family: Arial, sans-serif;
}
Link the static file in your template:
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('auth.static', filename='auth/style.css') }}">
</head>
<body>
<h1>Login Page</h1>
</body>
</html>
Step 6: Running the Application
Run your application and visit /auth/login to see the login page.
python main.py
Conclusion
Using Blueprints in Flask helps modularize your application, making it easier to maintain and scale. By separating routes, templates, and static files into specific blueprints, you can manage your codebase more effectively.