Flask-DebugToolbar

This extension adds a toolbar overlay to Flask applications containing useful information for debugging.

_images/example.gif

Installation

Installing is simple with pip:

$ pip install flask-debugtoolbar

Usage

Setting up the debug toolbar is simple:

from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension

app = Flask(__name__)

# the toolbar is only enabled in debug mode:
app.debug = True

# set a 'SECRET_KEY' to enable the Flask session cookies
app.config['SECRET_KEY'] = '<replace with a secret key>'

toolbar = DebugToolbarExtension(app)

The toolbar will automatically be injected into HTML responses when debug mode is on. In production, setting app.debug = False will disable the toolbar.

This extension also supports the Flask app factory pattern by separately creating the toolbar and later initializing it for an app:

toolbar = DebugToolbarExtension()
# Then later on.
app = create_app('the-config.cfg')
toolbar.init_app(app)

Configuration

The toolbar support several configuration options:

Name Description Default
DEBUG_TB_ENABLED Enable the toolbar? app.debug
DEBUG_TB_HOSTS Whitelist of hosts to display toolbar any host
DEBUG_TB_INTERCEPT_REDIRECTS Should intercept redirects? True
DEBUG_TB_PANELS List of module/class names of panels enable all built-in panels
DEBUG_TB_PROFILER_ENABLED Enable the profiler on all requests False, user-enabled
DEBUG_TB_TEMPLATE_EDITOR_ENABLED Enable the template editor False

To change one of the config options, set it in the Flask app’s config like:

app.config['DEBUG_TB_INTERCEPT_REDIRECTS'] = False

Panels

Built-In Panels

Versions

flask_debugtoolbar.panels.versions.VersionDebugPanel

Shows the installed Flask version. The expanded view displays all installed packages and their versions as detected by setuptools.

Time

flask_debugtoolbar.panels.timer.TimerDebugPanel

Shows the time taken to process the current request. The expanded view includes the breakdown of CPU time, by user and system, wall clock time, and context switches.

_images/screenshot-time-panel.png

HTTP Headers

flask_debugtoolbar.panels.headers.HeaderDebugPanel

Displays the HTTP headers for the current request.

_images/screenshot-headers-panel.png

Request Vars

flask_debugtoolbar.panels.request_vars.RequestVarsDebugPanel

Displays details of the Flask request-related variables, including the view function parameters, cookies, session variables, and GET and POST variables.

_images/screenshot-request-vars-panel.png

Config

flask_debugtoolbar.panels.config_vars.ConfigVarsDebugPanel

Shows the contents of the Flask application’s config dict app.config.

_images/screenshot-config-panel.png

Templates

flask_debugtoolbar.panels.template.TemplateDebugPanel

Shows information about the templates rendered for this request, and the value of the template parameters provided.

_images/screenshot-template-panel.png

SQLAlchemy

flask_debugtoolbar.panels.sqlalchemy.SQLAlchemyDebugPanel

Shows SQL queries run during the current request.

Note

This panel requires using the Flask-SQLAlchemy extension in order to record the queries. See the Flask-SQLAlchemy Quickstart section to configure it.

For additional details on query recording see the get_debug_queries() documentation.

Note

SQL syntax highlighting requires Pygments to be installed.

_images/screenshot-sqlalchemy-panel.png

Logging

flask_debugtoolbar.panels.logger.LoggingPanel

Displays log messages recorded during the current request.

_images/screenshot-logger-panel.png

Route List

flask_debugtoolbar.panels.route_list.RouteListDebugPanel

Displays the Flask URL routing rules.

Profiler

flask_debugtoolbar.panels.profiler.ProfilerDebugPanel

Reports profiling data for the current request. Due to the performance overhead, profiling is disabled by default. Click the checkmark to toggle profiling on or off. After enabling the profiler, refresh the page to re-run it with profiling.

_images/screenshot-profiler-panel.png

Contributing

Fork us on GitHub

Thanks

This was based on the original django-debug-toolbar. Thanks to Michael van Tellingen for the original development of this Flask extension, and to all the individual contributors.

Indices and tables