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.py
にDEBUG_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サーバーとか立てておくと便利かもしれませんね。