Django(73)django-debug-toolbar調試工具


介紹

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面板突出顯示執行時間超過這段時間(以毫秒為單位)的查詢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM