Source code for debug_toolbar_force.middleware
from django.http import HttpResponse
from django.utils.encoding import smart_str
from django.utils.translation import gettext_lazy as _
from django_nine.versions import DJANGO_GTE_1_10
from .settings import GET_PARAM_NAME_FORCE, GET_PARAM_NAME_NON_AJAX
__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
__copyright__ = "2016-2022 Artur Barseghyan"
__license__ = "GPL-2.0-only OR LGPL-2.1-or-later"
__all__ = ("ForceDebugToolbarMiddleware",)
[docs]class ForceDebugToolbarMiddleware(object):
"""The `django-debug-toolbar` for views that do not return HTML."""
if DJANGO_GTE_1_10:
def __init__(self, get_response=None):
self.get_response = get_response
super(ForceDebugToolbarMiddleware, self).__init__()
def __call__(self, request):
response = None
if hasattr(self, "process_request"):
response = self.process_request(request)
if not response:
response = self.get_response(request)
if hasattr(self, "process_response"):
response = self.process_response(request, response)
return response
[docs] def process_request(self, request):
"""Process request.
If `GET_PARAM_NAME_NON_AJAX` is present in request.GET, set
request.is_ajax to False.
"""
non_ajax = GET_PARAM_NAME_NON_AJAX in request.GET
if non_ajax:
request.is_ajax = False
return None
[docs] def process_response(self, request, response):
"""Process response.
If `GET_PARAM_NAME_FORCE` is present in request.GET wrap response
in <html><body>{{ response }}</body></html>.
"""
debug = GET_PARAM_NAME_FORCE in request.GET
if debug:
if response["Content-Type"] == "application/octet-stream":
new_content = (
"<html><body>"
"{}: {}</body></html>"
"".format(_("Binary Data, Length"), len(response.content))
)
response = HttpResponse(new_content)
elif response["Content-Type"] != "text/html":
content = smart_str(response.content)
response = HttpResponse(
"<html><body>{}" "</body></html>".format(content)
)
return response