Django開発の必須パッケージ、django-debug-toolbarの導入

もはや、djangoで開発を行うなら欠かせないと言っても過言ではないdjango-debug-toolbarのご紹介

django-debug-toolbar

ページの表示速度や、SQLのクエリにどれくらい時間がかかっているか、またテンプレート内の変数の値の確認など、デバッグ時に重宝する情報をいろいろ見ることができるようになるサイドバーが、Webページ上に表示されるようになります。

そのほかにも、リダイレクトのコントロールなど便利機能が付いています。

インストール

インストールはとっても簡単

pip install django-debug-toolbar

設定

settings.pyに必要な情報を追記していきます。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'debug_toolbar', # 追記
]

MIDDLEWARE = [
    # 略
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'debug_toolbar.middleware.DebugToolbarMiddleware' # 追記
]

INTERNAL_IPS = ("127.0.0.1",) # 追記

URLの設定も必要なので追記していきます。
こちらは、デバッグ時のみ有効になるように少し工夫します。

from django.contrib import admin
from django.urls import path, include
from . import settings
urlpatterns = [
    path('admin/', admin.site.urls),
]

if settings.DEBUG:
    import debug_toolbar
    urlpatterns.append(path("", include(debug_toolbar.urls)))

わざわざ条件分岐で分けなくとも、デバッグモードが無効ならデバッグ情報は表示されないのですが、ページへのアクセスができてしまうので、デバッグモード以外はURLのルーティングに追加しないような工夫です。

サイドバー

サイドバーに表示するパネルはカスタマイズできます。

settings.pyDEBUG_TOOLBAR_PANELSを書き足すとカスタマイズできます。

ちなみに、デフォルトでは以下のようになっています。

DEBUG_TOOLBAR_PANELS = [
    'debug_toolbar.panels.versions.VersionsPanel',
    'debug_toolbar.panels.timer.TimerPanel',
    'debug_toolbar.panels.settings.SettingsPanel',
    'debug_toolbar.panels.headers.HeadersPanel',
    'debug_toolbar.panels.request.RequestPanel',
    'debug_toolbar.panels.sql.SQLPanel',
    'debug_toolbar.panels.staticfiles.StaticFilesPanel',
    'debug_toolbar.panels.templates.TemplatesPanel',
    'debug_toolbar.panels.cache.CachePanel',
    'debug_toolbar.panels.signals.SignalsPanel',
    'debug_toolbar.panels.logging.LoggingPanel',
    'debug_toolbar.panels.redirects.RedirectsPanel',
]

'debug_toolbar.panels.profiling.ProfilingPanel'というパネルはビルトインですが、デフォルトでは無効にされています。

Profilingパネルでプロファイリング情報が表示できます。

その他にも、サードパーティー製のパネルを追加することもできるようです。

debugsqlshell

django-debug-toolbarを導入するとdebugsqlshellというコマンドが使えるようになります。
基本的には

python manage.py shell

と同じですが、データベース操作時SQLのクエリ文が同時に表示されるようになります。

python manage.py debugsqlshell
>> from django.contrib.auth import get_user_model
>>> User = get_user_model()
>>> User.objects.all()
SELECT "accounts_user"."id",
       "accounts_user"."password",
       "accounts_user"."last_login",
       "accounts_user"."is_superuser",
       "accounts_user"."email",
       "accounts_user"."first_name",
       "accounts_user"."last_name",
       "accounts_user"."is_staff",
       "accounts_user"."is_active",
FROM "accounts_user"
LIMIT 21 [0.87ms]
<QuerySet [<User: admin@admin.com>]>

ローカルホスト以外でもデバッグツールバーを表示する

リモートで作業をしていると、ローカルホスト以外でもデバッグ情報を見たい時があると思います。

そんな時は、INTERNAL_IPSに接続のIPアドレスを足します。
つまり、アクセスするPCのIPアドレスです。

例えばこんな感じ

INTERNAL_IPS = ("127.0.0.1", "220.208.59.123") # 追記

デバッグ接続用のVPNサーバーとか立てておくと便利かもしれませんね。