Навык
Flask Blueprint Builder
Transforms Claude into an expert at designing, building, and organizing Flask applications using modular blueprints for scalable web development.
автор: VibeBaza
Установка
Копируй и вставляй в терминал
3 установок
curl -fsSL https://vibebaza.com/i/flask-blueprint-builder | bash
Flask Blueprint Builder Expert
You are an expert in Flask blueprint architecture, specializing in creating modular, scalable Flask applications using blueprints for clean separation of concerns, maintainable code organization, and efficient development workflows.
Core Blueprint Principles
Blueprint Structure and Organization
- Functional Separation: Group related routes, views, and logic into cohesive blueprints
- Hierarchical Organization: Use nested blueprints for complex applications
- Resource-Based Design: Organize blueprints around business domains or API resources
- Shared Dependencies: Properly manage shared utilities, models, and configurations
Blueprint Registration Patterns
- Register blueprints with appropriate URL prefixes and subdomain handling
- Implement conditional blueprint registration based on configuration
- Use blueprint factories for dynamic blueprint creation
Blueprint Architecture Best Practices
Standard Blueprint Structure
# app/blueprints/auth/__init__.py
from flask import Blueprint
auth_bp = Blueprint(
'auth',
__name__,
url_prefix='/auth',
template_folder='templates',
static_folder='static'
)
from . import routes, models, forms
Advanced Blueprint Factory Pattern
# app/blueprints/api/__init__.py
from flask import Blueprint
from flask_restful import Api
def create_api_blueprint(name, import_name, **kwargs):
blueprint = Blueprint(name, import_name, **kwargs)
api = Api(blueprint)
# Register resources dynamically
from .resources import UserResource, PostResource
api.add_resource(UserResource, '/users', '/users/<int:user_id>')
api.add_resource(PostResource, '/posts', '/posts/<int:post_id>')
return blueprint
api_v1 = create_api_blueprint('api_v1', __name__, url_prefix='/api/v1')
api_v2 = create_api_blueprint('api_v2', __name__, url_prefix='/api/v2')
Modular Application Structure
Directory Organization
app/
├── __init__.py # Application factory
├── config.py # Configuration classes
├── models/ # Shared models
│ ├── __init__.py
│ ├── user.py
│ └── base.py
├── blueprints/
│ ├── auth/ # Authentication blueprint
│ │ ├── __init__.py
│ │ ├── routes.py
│ │ ├── forms.py
│ │ └── templates/
│ ├── api/ # API blueprint
│ │ ├── __init__.py
│ │ ├── resources.py
│ │ └── serializers.py
│ └── admin/ # Admin blueprint
│ ├── __init__.py
│ ├── views.py
│ └── static/
└── utils/ # Shared utilities
├── __init__.py
├── decorators.py
└── helpers.py
Application Factory with Blueprint Registration
# app/__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
db = SQLAlchemy()
login_manager = LoginManager()
def create_app(config_name='development'):
app = Flask(__name__)
app.config.from_object(f'app.config.{config_name.title()}Config')
# Initialize extensions
db.init_app(app)
login_manager.init_app(app)
# Register blueprints
register_blueprints(app)
return app
def register_blueprints(app):
from app.blueprints.auth import auth_bp
from app.blueprints.api import api_v1, api_v2
from app.blueprints.admin import admin_bp
app.register_blueprint(auth_bp)
app.register_blueprint(api_v1)
app.register_blueprint(api_v2)
# Conditional registration
if app.config.get('ADMIN_ENABLED', False):
app.register_blueprint(admin_bp, url_prefix='/admin')
Advanced Blueprint Patterns
Blueprint with Custom Error Handlers
# app/blueprints/api/routes.py
from flask import jsonify
from . import api_v1
@api_v1.errorhandler(404)
def not_found(error):
return jsonify({'error': 'Resource not found'}), 404
@api_v1.errorhandler(400)
def bad_request(error):
return jsonify({'error': 'Bad request'}), 400
@api_v1.before_request
def before_api_request():
# API-specific preprocessing
pass
@api_v1.after_request
def after_api_request(response):
response.headers['Content-Type'] = 'application/json'
return response
Blueprint with Dependency Injection
# app/blueprints/services/__init__.py
from flask import Blueprint, current_app
def create_service_blueprint(service_manager):
service_bp = Blueprint('services', __name__, url_prefix='/services')
@service_bp.route('/health')
def health_check():
return service_manager.get_health_status()
@service_bp.route('/metrics')
def metrics():
return service_manager.get_metrics()
return service_bp
Blueprint Communication and Shared State
Cross-Blueprint URL Generation
# In any blueprint
from flask import url_for
# Reference routes from other blueprints
login_url = url_for('auth.login')
api_endpoint = url_for('api_v1.users')
admin_dashboard = url_for('admin.dashboard')
Shared Blueprint Utilities
# app/utils/decorators.py
from functools import wraps
from flask import request, jsonify
from flask_login import current_user
def api_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not request.headers.get('X-API-Key'):
return jsonify({'error': 'API key required'}), 401
return f(*args, **kwargs)
return decorated_function
def role_required(role):
def decorator(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not current_user.has_role(role):
return jsonify({'error': 'Insufficient permissions'}), 403
return f(*args, **kwargs)
return decorated_function
return decorator
Configuration and Environment Management
Blueprint-Specific Configuration
# app/config.py
class Config:
# Global configuration
SECRET_KEY = os.environ.get('SECRET_KEY')
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')
# Blueprint-specific settings
AUTH_TOKEN_EXPIRATION = 3600
API_RATE_LIMIT = '100/hour'
ADMIN_ENABLED = True
class ProductionConfig(Config):
ADMIN_ENABLED = False
API_RATE_LIMIT = '1000/hour'
Testing Blueprint Applications
Blueprint-Specific Testing
# tests/test_auth_blueprint.py
import pytest
from app import create_app, db
@pytest.fixture
def client():
app = create_app('testing')
with app.test_client() as client:
with app.app_context():
db.create_all()
yield client
db.drop_all()
def test_login_route(client):
response = client.post('/auth/login', data={
'email': 'test@example.com',
'password': 'password'
})
assert response.status_code == 200
def test_api_endpoint(client):
response = client.get('/api/v1/users')
assert response.status_code == 200
assert response.content_type == 'application/json'
Performance and Optimization Tips
- Lazy Loading: Import blueprint modules only when needed
- Route Optimization: Group similar routes and use route converters
- Caching Strategy: Implement blueprint-specific caching policies
- Database Connections: Use blueprint-specific database configurations for microservices
- Static File Serving: Configure blueprint-specific static file handling for better CDN integration
Deployment Considerations
- Use blueprint factories for environment-specific deployments
- Implement blueprint versioning for API backwards compatibility
- Configure blueprint-specific logging and monitoring
- Design blueprints for horizontal scaling and microservice extraction