갈루아의 반서재

Django Debug Toolbar 설치 + uWSGI 패널 추가하기


1. Getting Code


pip 를 통해 Django Debug Toolbar 를 설치한다.

1
# pip install django-debug-toolbar
cs


2. Prerequisites


INSTALLED_APPS 에 'django.contrib.staticfile' 가 포함되어 있는지 확인한다.

settings.py

1
2
3
4
5
6
# Application definition
INSTALLED_APPS = [
    # ...
    'django.contrib.staticfiles',
    # ...
]
cs


3. URLConf


Debug Toolbar’s URLs을 프로젝트 URLs에 포함시킨다.

urls.py

1
2
3
4
5
6
7
8
from django.conf import settings
from django.conf.urls import url, include
 
if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        url(r'^__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns
cs


4. DDT를 위해 독립된 설정 영역


관리의 편이를 위해 DDT를 위해 독립된 설정 영역을 만든다.

INTERNAL_IPS 에 포함된 IP 에서만 해당 툴바가 보이게 된다. 당연히 아래 영역은 MIDDLEWARE_CLASSES, INSTALLED_APPS 하단에 위치해야 한다.

settings.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
DEBUG = True
 
if DEBUG:
   INTERNAL_IPS = ('123.123.10.10''localhost',)
   MIDDLEWARE_CLASSES += (
       'debug_toolbar.middleware.DebugToolbarMiddleware',
   )
 
   INSTALLED_APPS += (
       'debug_toolbar',
   )
 
   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_CONFIG = {
       'INTERCEPT_REDIRECTS': False,
   }
cs

DEBUG_TOOLBAR_CONFIG 에 False 로 포함된 INTERCEPT_REDIRECTS 는 클릭이 되지 않는다.



5. uWSGI 패널 추가하기


workers, applications, spooler jobs 등의 uWSGI stats 를 보여주는 uWSGI 패널을 추가해보자.

1) django-uwsgi 를 설치한다.

1
# pip install django-uwsgi
cs

2) INSTALLED_APPS 에 django_uwsgi 를 추가한다(django-uwsgi 가 아니라 django_uwsgi 임에 주의한다)

1
2
3
4
5
INSTALLED_APPS = [
    #...
    'django_uwsgi',
    #...
]
cs

3) DEBUG_TOOLBAR_PANELS 에 django_uwsgi.panels.UwsgiPanel 을 추가한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   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',
       'django_uwsgi.panels.UwsgiPanel',
   ]
cs

추가적인 패널에 대한 정보는 아래 링크를 참고한다.

http://django-debug-toolbar.readthedocs.io/en/stable/panels.html?highlight=uwsgi


실행 및 완성된 모습은 다음과 같다.

1
2
3
4
5
6
7
8
9
10
# uwsgi --http :80 --wsgi-file wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191
 
# uwsgitop 127.0.0.1:9191
uwsgi-2.0.15 - Sat May 20 14:57:10 2017 - req: 10 - RPS: 0 - lq: 0 - tx: 601.5K
node: 127.0.0.1 - cwd: /root/vikander/vikander - uid: 0 - gid: 0 - masterpid: 7673
 WID    %       PID     REQ     RPS     EXC     SIG     STATUS  AVG     RSS     VSZ     TX      ReSpwn  HC      RunT    LastSpwn
 3      60.0    7679    6       0       0       0       idle    30ms    0       0       601.3K  1       0       1793.9  14:56:09
 2      20.0    7678    2       0       0       0       idle    295ms   0       0       58      1       0       786.194 14:56:09
 4      20.0    7681    2       0       0       0       idle    297ms   0       0       58      1       0       789.861 14:56:09
 1      0.0     7677    0       0       0       0       idle    0ms     0       0       0       1       0       0.0     14:56:09
cs