Django(73)django-debug-toolbar除錯工具

Silent丿丶黑羽發表於2021-11-02

介紹

Django框架的除錯工具欄使用django-debug-toolbar庫,是一組可配置的皮膚,顯示有關當前請求/響應的各種除錯資訊,點選時,顯示有關皮膚內容的更多詳細資訊。
 

應用

 

1. 安裝

pip install django-debug-toolbar

 

2. settings配置

先決條件:必須確認django.contrib.staticfiles 正確安裝並且啟用

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

STATIC_URL = '/static/'

 

3. urls.py路由配置

在主應用下的根urls.py中的最下面新增如下程式碼:

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

說明

  • 這裡使用 '\__debug__' 作為路徑訪問,可以設定任意的路徑名,只要能輕易區分一般應用
  • 如果放在子應用的urls.py下的話,會丟擲NoReverseMatch 'djdt' is not a registered namespace異常
     

4. 啟動中介軟體

除錯工具欄主要在中介軟體中實現:

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

注意:這個中介軟體儘可能配置到最前面,但是,必須要要放在處理編碼和響應內容的中介軟體後面,比如我們要是使用了GZipMiddleware,就要把DebugToolbarMiddleware放在GZipMiddleware後面
 

5. 設定內部IP

除錯工具欄只會允許特定的ip訪問,在settingsINTERNAL_IPS中配置

INTERNAL_IPS = [
    # ...
    '127.0.0.1',
    # ...
]

 

6. 訪問

訪問應用的任意頁面,在頁面的右上角會有一個 DJDT的懸浮窗

點選後就會出現除錯工具欄

 

7. 皮膚功能

除錯工具欄上有多個功能,下面介紹作用

  • Versions :代表是哪個django版本
  • Timer : 用來計時的,判斷載入當前頁面總共花的時間
  • Settings : 讀取django中的配置資訊
  • Headers : 當前請求頭和響應頭資訊
  • Request: 當前請求的相關資訊(檢視函式,Cookie資訊,Session資訊等)
  • SQL:檢視當前介面執行的SQL語句
  • StaticFiles:當前介面載入的靜態檔案
  • Templates:當前介面用的模板
  • Cache:快取資訊
  • Signals:訊號
  • Logging:當前介面日誌資訊
  • Redirects:當前介面的重定向資訊
     

8. 皮膚配置

django-debug-toolbar預設使用全皮膚,預設的全域性配置在 debug_toolbar.settings.CONFIG_DEFAULTS

PANELS_DEFAULTS = [
    "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中配置 DEBUG_TOOLBAR_PANELS 即可,示例如下:

DEBUG_TOOLBAR_PANELS = [
    "debug_toolbar.panels.timer.TimerPanel",
    "debug_toolbar.panels.headers.HeadersPanel",
    "debug_toolbar.panels.request.RequestPanel",
    "debug_toolbar.panels.templates.TemplatesPanel",
]

 

9. 工具欄配置

settings中配置 DEBUG_TOOLBAR_CONFIG 覆蓋預設配置,分為2部分,一部分適用於工具欄本身,另一部分適用於某些特定皮膚

DEBUG_TOOLBAR_CONFIG = {
    # Toolbar options
    "DISABLE_PANELS": {"debug_toolbar.panels.redirects.RedirectsPanel"},
    "INSERT_BEFORE": "</body>",
    "RENDER_PANELS": None,
    "RESULTS_CACHE_SIZE": 10,
    "ROOT_TAG_EXTRA_ATTRS": "",
    "SHOW_COLLAPSED": False,
    "SHOW_TOOLBAR_CALLBACK": "debug_toolbar.middleware.show_toolbar",
    # Panel options
    "EXTRA_SIGNALS": [],
    "ENABLE_STACKTRACES": True,
    "HIDE_IN_STACKTRACES": (
        "socketserver" if six.PY3 else "SocketServer",
        "threading",
        "wsgiref",
        "debug_toolbar",
        "django.db",
        "django.core.handlers",
        "django.core.servers",
        "django.utils.decorators",
        "django.utils.deprecation",
        "django.utils.functional",
    ),
    "PROFILER_MAX_DEPTH": 10,
    "SHOW_TEMPLATE_CONTEXT": True,
    "SKIP_TEMPLATE_PREFIXES": ("django/forms/widgets/", "admin/widgets/"),
    "SQL_WARNING_THRESHOLD": 500,  # milliseconds
}

 

工具欄選項

  • DISABLE_PANELS
    預設: {'debug_toolbar.panels.redirects.RedirectsPanel'}
    此設定是要禁用(但仍顯示)的皮膚的完整Python路徑的集合

  • INSERT_BEFORE
    預設: '</body>'
    工具欄在HTML中搜尋此字串並在之前插入。

  • RENDER_PANELS
    預設: None
    如果設定為False,除錯工具欄將把皮膚的內容保留在伺服器上的記憶體中並按需載入它們。如果設定為True,則會在每個頁面內呈現皮膚。這可能會降低頁面呈現速度,但在多程式伺服器上需要這樣做,例如,如果在生產中部署工具欄(不建議這樣做)。
    預設值None告訴工具欄自動執行正確的操作,具體取決於WSGI容器是否執行多個程式。此設定允許您在需要時強制執行不同的操作。

  • RESULTS_CACHE_SIZE
    預設: 10
    工具欄在記憶體中保持的結果快取數量。

  • ROOT_TAG_EXTRA_ATTRS
    預設: ''
    此設定將注入根模板div中,以避免與客戶端框架發生衝突。例如,將除錯工具欄與Angular.js一起使用時,將其設定為'ng-non-bindable''class="ng-non-bindable"'

  • SHOW_COLLAPSED
    預設: False
    如果更改為True,則預設情況下將摺疊工具欄。

  • SHOW_TOOLBAR_CALLBACK
    預設: 'debug_toolbar.middleware.show_toolbar'
    這是用於確定工具欄是否應顯示的函式路徑,預設檢測DEBUG設定為True,並且訪問IP必須在INTERNAL_IPS中,程式碼如下:

def show_toolbar(request):
    """
    Default function to determine whether to show the toolbar on a given page.
    """
    if request.META.get("REMOTE_ADDR", None) not in settings.INTERNAL_IPS:
        return False

    return bool(settings.DEBUG)

可以設定自定義的檢測函式路徑
 

皮膚選項

  • EXTRA_SIGNALS
    預設: []
    皮膚:訊號
    可能在專案中的自定義訊號列表,定義為訊號的Python路徑。

  • ENABLE_STACKTRACES
    預設: True
    皮膚:快取,SQL
    如果設定為True,則將顯示SQL查詢和快取呼叫的堆疊跟蹤。啟用堆疊跟蹤會增加執行查詢時使用的CPU時間。

  • HIDE_IN_STACKTRACES
    預設值:('socketserver', 'threading', 'wsgiref', 'debug_toolbar', 'django')`
    皮膚:快取,SQL
    用於消除與伺服器相關的堆疊跟蹤,這可能導致巨大的DOM結構和工具欄渲染延遲。

  • PROFILER_MAX_DEPTH
    預設: 10
    皮膚:剖析
    此設定會影響分析器分析中的函式呼叫深度。

  • SHOW_TEMPLATE_CONTEXT
    預設: True
    皮膚:模板
    如果設定為True則模板的上下文將包含在模板除錯皮膚中。如果專案中擁有大型模板上下文,或者具有不希望被評估的惰性資料結構的模板上下文,則關閉此選項非常有用。

  • SKIP_TEMPLATE_PREFIXES
    預設: ('django/forms/widgets/', 'admin/widgets/')
    皮膚:模板
    收集渲染的模板和上下文時,將跳過以這些字串開頭的模板。預設情況下會跳過基於模板的表單小部件,因為皮膚的HTML可以輕鬆地增長到數百兆位元組,包含許多表單欄位和許多選項。

  • SQL_WARNING_THRESHOLD
    預設: 500
    皮膚:SQL
    SQL皮膚突出顯示執行時間超過這段時間(以毫秒為單位)的查詢

相關文章