もた日記

くだらないことを真面目にやる

Djangoメモ(14) : Django Debug Toolbarでデバッグ情報を表示

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考に掲示板アプリを作成中。


Django Debug Toolbar

アプリを作成中だがデバッグしやすいように色々なデバッグ情報を表示できるDjango Debug Toolbarを使ってみる。

github.com


インストール

インストール方法はこのドキュメントに書いてある。
現在のバージョンは1.9でDjango 1.11以上なら動作するとのこと。

最初にパッケージをインストールする。

$ pip install django-debug-toolbar

開発中のバージョンを使いたい場合は以下のようにインストール。

$ pip install -e git+https://github.com/jazzband/django-debug-toolbar.git#egg=django-debug-toolbar

今回はPipenvで環境を構築しているので下記コマンドでインストール。

$ pipenv install --dev django-debug-toolbar

次にsettings.pyINSTALLED_APPS'debug_toolbar'を追加する。
'django.contrib.staticfiles'も必要だがデフォルトで設定されているはず。

INSTALLED_APPS = [
    # ...
    'django.contrib.staticfiles',
    # ...
    'debug_toolbar',
]

STATIC_URL = '/static/'

続いてURLconfを編集する。Django 2.0を使用しているのでpathを使うことにする。

from django.conf import settings
from django.urls import path, include

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        path('__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns

settings.pyMIDDLEWAREに追加。

MIDDLEWARE = [
    # ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    # ...
]

最後にsettings.pyINTERNAL_IPSを追加する。 ローカル開発環境では127.0.0.1を指定ということだがVagrant環境のためか動作しなかった。

INTERNAL_IPS = ['127.0.0.1']

192.168.33.10を指定しても動作しなかったので調べたところ、ここにはREMOTE_ADDRを指定するらしい。
REMOTE_ADDRの確認方法だが、アプリを適当に編集してTracebackを出すとRequest informationMETAの中にREMOTE_ADDRが確認できる。

f:id:wonder-wall:20180312233614p:plain

このREMOTE_ADDRを指定するとDjango Debug Toolbarが表示されるようになった。

INTERNAL_IPS = ['127.0.0.1', '192.168.33.1']

f:id:wonder-wall:20180312233808p:plain


各パネルの表示内容

Django Debug Toolbarは複数のパネルで構成されているのでデフォルトで設定されているパネルを見てみる。

Versions

f:id:wonder-wall:20180313082217p:plain

Time(時刻)

f:id:wonder-wall:20180313082229p:plain

Settings

f:id:wonder-wall:20180313082245p:plain

Headers

f:id:wonder-wall:20180313082258p:plain

Request

f:id:wonder-wall:20180313082312p:plain

SQL

f:id:wonder-wall:20180313082324p:plain

Static files

f:id:wonder-wall:20180313082335p:plain

Templates

f:id:wonder-wall:20180313082347p:plain

Cache

f:id:wonder-wall:20180313082358p:plain

Signals(フレームワークのどこかで起きたアクションに応じた通知を受ける仕組み)

f:id:wonder-wall:20180313082416p:plain

Logging(loggingモジュールの出力)

f:id:wonder-wall:20180313082428p:plain

Intercept redirectsパネルはデフォルトでは表示されるが無効になっている。このパネルはリダイレクト処理をデバッグするときに役立つようだが、通常時は邪魔になるため無効にしているようだ。


パネル設定

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',
]

下記内容をsettings.pyに指定すると図のようになる。

DEBUG_TOOLBAR_PANELS = [
    'debug_toolbar.panels.timer.TimerPanel',
    'debug_toolbar.panels.versions.VersionsPanel',
    'debug_toolbar.panels.profiling.ProfilingPanel'
]

f:id:wonder-wall:20180313224734p:plain

一番下の'debug_toolbar.panels.profiling.ProfilingPanel'はビルトインパネルだがデフォルトで無効にされているProfilingパネルでプロファイリング情報が表示できる。

f:id:wonder-wall:20180313224748p:plain

ドキュメントではサードパーティのパネルも紹介されている。


debugsqlshellコマンド

Django Debug Toolbarをインストールするとdebugsqlshellコマンドが使えるようになっている。
これはpython manage.py shellのような対話型シェルだがSQL文も出力されるようになる。

f:id:wonder-wall:20180313231743p:plain


まとめ

  • Django Debug Toolbarで色々なデバッグ情報を表示可能
  • インストールではINTERNAL_IPSの設定に注意
  • 複数のパネルで構成されておりパネルは追加・削除が可能
  • debugsqlshellコマンドも使用可能