Development-Only Django Debug Toolbar¶
Django Debug Toolbar is a handy development tool. It provides tons of useful instruments for developers.
Django Debug Toolbar should be used only in development environments. It should not be even installed on production environments. This requires to use different setups for production and development environments.
The technique described is not limited only to Django Debug Toolbar. It could be used to isolate dependencies and tools which are required only during development.
Note
Django Debug Toolbar is enabled and shown only if Django server is started:
in debug mode (DEBUG=True)
with development-only settings module, e.g. DJANGO_SETTINGS_MODULE=mdapi.settings_dev
Step 1. Create requirements-dev.txt file¶
Create a requirements-dev.txt file and move into it all development-only dependencies from requirements.txt:
-r ./requirements.txt
django-debug-toolbar
django-extensions
pytest
pytest-django
In my requirements-dev.txt I have django-debug-toolbar, pytest and pytest-django as development dependencies. Generic dependencies are also included by using a reference to requirements.txt.
To install development virtual environment you should use requirements-dev.txt instead of requirements.txt:
$ pip install -r requirements-dev.txt
Step 2. Create settings_dev module¶
Create settings_dev.py in your Django project directory:
from .settings import *
from django.urls import include, path
globals().setdefault('DEBUG', False)
if DEBUG:
INSTALLED_APPS += [
'django_extensions',
'debug_toolbar',
]
MIDDLEWARE += [
'debug_toolbar.middleware.DebugToolbarMiddleware',
]
INTERNAL_IPS = [
'127.0.0.1',
]
DEV_URLS = [
path('__debug__/', include("debug_toolbar.urls")),
]
This is configuration file defines settings for development-only dependencies. All settings from the project’s settings module are inherited.
Step 3. Add development-only urls¶
# ..
from django.conf import settings
# ...
if getattr(settings, "DEBUG", False):
urlpatterns += getattr(settings, "DEV_URLS", [])
Step 4. Start Development Server¶
To start development server with development settings, define DJANGO_SETTINGS_MODULE environment variable which points to our development settings module:
$ export DJANGO_SETTINGS_MODULE=<project-module>.settings_dev
$ python manage.py runserver
Start Debug Development Server with Visual Studio Code (VSCode)¶
With VSCode you could create/update your launch.json file to define proper environment variables. Here is an example I use:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Django My Code",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}\\manage.py",
"args": [
"runserver"
],
"django": true,
"justMyCode": true,
"env": {
"DJANGO_SETTINGS_MODULE": "mdapi.settings_dev"
}
},
{
"name": "Python: Django",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}\\manage.py",
"args": [
"runserver"
],
"django": true,
"justMyCode": false,
"env": {
"DJANGO_SETTINGS_MODULE": "mdapi.settings_dev"
}
}
]
}