From 30180ec9a3d82752e309f5d0f9c685dec097e40d Mon Sep 17 00:00:00 2001 From: Aymeric Augustin Date: Fri, 1 Nov 2013 13:35:56 +0100 Subject: Add response headers to the Headers panel. --- debug_toolbar/panels/headers.py | 10 ++++++---- .../templates/debug_toolbar/panels/headers.html | 23 ++++++++++++++++++++-- docs/installation.rst | 7 ++++--- docs/panels.rst | 11 ++++++++--- example/settings.py | 2 +- 5 files changed, 40 insertions(+), 13 deletions(-) diff --git a/debug_toolbar/panels/headers.py b/debug_toolbar/panels/headers.py index de47c0e..38b5ac3 100644 --- a/debug_toolbar/panels/headers.py +++ b/debug_toolbar/panels/headers.py @@ -46,16 +46,18 @@ class HeaderDebugPanel(DebugPanel): def process_request(self, request): wsgi_env = list(sorted(request.META.items())) - self.headers = OrderedDict( + self.request_headers = OrderedDict( (unmangle(k), v) for (k, v) in wsgi_env if k.startswith('HTTP_')) - if 'Cookie' in self.headers: - self.headers['Cookie'] = '<< see Request Vars panel >>' + if 'Cookie' in self.request_headers: + self.request_headers['Cookie'] = '=> see Request Vars panel' self.environ = OrderedDict( (k, v) for (k, v) in wsgi_env if k in self.environ_filter) def process_response(self, request, response): + self.response_headers = OrderedDict(sorted(response.items())) self.record_stats({ - 'headers': self.headers, + 'request_headers': self.request_headers, + 'response_headers': self.response_headers, 'environ': self.environ, }) diff --git a/debug_toolbar/templates/debug_toolbar/panels/headers.html b/debug_toolbar/templates/debug_toolbar/panels/headers.html index 6b057e9..c7f01a2 100644 --- a/debug_toolbar/templates/debug_toolbar/panels/headers.html +++ b/debug_toolbar/templates/debug_toolbar/panels/headers.html @@ -1,6 +1,6 @@ {% load i18n %} -

{% trans "HTTP Headers" %}

+

{% trans "Request Headers" %}

@@ -10,7 +10,26 @@ - {% for key, value in headers.items %} + {% for key, value in request_headers.items %} + + + + + {% endfor %} + +
{{ key|escape }}{{ value|escape }}
+ +

{% trans "Response Headers" %}

+ + + + + + + + + + {% for key, value in response_headers.items %} diff --git a/docs/installation.rst b/docs/installation.rst index 1e228cb..32483df 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -28,9 +28,10 @@ Installation Tying into middleware allows each panel to be instantiated on request and rendering to happen on response. - The order of ``MIDDLEWARE_CLASSES`` is important: the Debug Toolbar - middleware must come after any other middleware that encodes the - response's content (such as GZipMiddleware). + The order of ``MIDDLEWARE_CLASSES`` is important. You should include the + Debug Toolbar middleware as early as possible in the list. However, it must + come after any other middleware that encodes the response's content, such + as ``GZipMiddleware``. .. note:: diff --git a/docs/panels.rst b/docs/panels.rst index a4b809e..b5b7b2e 100644 --- a/docs/panels.rst +++ b/docs/panels.rst @@ -30,12 +30,17 @@ Path: ``debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel`` A list of settings in settings.py. -Header -~~~~~~ +Headers +~~~~~~~ Path: ``debug_toolbar.panels.headers.HeaderDebugPanel`` -Common HTTP headers. +This panels shows the HTTP request and response headers, as well as a +selection of values from the WSGI environment. + +Note that headers set by middleware placed before the debug toolbar middleware +in ``MIDDLEWARE_CLASSES`` won't be visible in the panel. The WSGI server +itself may also add response headers such as ``Date`` and ``Server``. Request ~~~~~~~ diff --git a/example/settings.py b/example/settings.py index 4df22a0..ce1f8e2 100644 --- a/example/settings.py +++ b/example/settings.py @@ -28,13 +28,13 @@ INSTALLED_APPS = ( ) MIDDLEWARE_CLASSES = ( + 'debug_toolbar.middleware.DebugToolbarMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'debug_toolbar.middleware.DebugToolbarMiddleware', ) ROOT_URLCONF = 'example.urls' -- cgit v1.2.3
{% trans "Key" %}{% trans "Value" %}
{{ key|escape }} {{ value|escape }}