| name | flask |
| description | Best practices for Flask web development including routing, blueprints, and testing. |
Skill: Flask
Best practices for Flask web development including routing, blueprints, and testing.
When to Use
Apply this skill when building Flask web applications or APIs — routing, blueprints, extensions, and testing.
Project Structure
- Use the application factory pattern (
create_app()) to avoid global state and enable testing.
- Organize features into Blueprints; register them in the factory.
- Keep configuration in a
config.py with classes like DevelopmentConfig, ProductionConfig.
Routing and Views
- Prefer explicit HTTP method decorators (
@app.get, @app.post) over generic @app.route with methods=[...].
- Validate request data early; return 400 errors for malformed input before processing.
- Use
flask.abort() with appropriate HTTP codes rather than returning error responses manually.
Extensions
- Initialize extensions lazily with
ext.init_app(app) inside the factory, not at module level.
- Common extensions: Flask-SQLAlchemy, Flask-Migrate, Flask-Login, Flask-WTF, Flask-CORS.
Testing
- Use
app.test_client() for HTTP-level tests and app.test_request_context() for unit tests.
- Use pytest fixtures to create the app and client; scope appropriately (
session for the app, function for the client).
- Set
TESTING=True and use a separate test database.
Pitfalls
- Never use the development server (
app.run()) in production — use Gunicorn or uWSGI.
- Avoid storing mutable state on the
app object; use g for request-scoped data.
- Never hardcode
SECRET_KEY — load from environment variables.