Ejemplo n.º 1
0
class DebugToolbarMiddleware(object):
    """
    Middleware to set up Debug Toolbar on incoming request and render toolbar
    on outgoing response.
    """
    def __init__(self):
        self.debug_toolbar = None
        self.original_urlconf = settings.ROOT_URLCONF
        self.original_pattern = patterns('', ('', include(self.original_urlconf)),)
        self.override_url = True

    def show_toolbar(self, request):
        if not settings.DEBUG:
            return False
        if request.is_ajax():
            return False
        if settings.INTERNAL_IPS and request.META.get('REMOTE_ADDR') not in settings.INTERNAL_IPS:
            return False
        return True

    def process_request(self, request):
        if self.override_url:
            debug_toolbar.urls.urlpatterns += self.original_pattern
            self.override_url = False
        request.urlconf = 'debug_toolbar.urls'

        if self.show_toolbar(request):
            self.debug_toolbar = DebugToolbar(request)
            for panel in self.debug_toolbar.panels:
                panel.process_request(request)

        return None

    def process_view(self, request, view_func, view_args, view_kwargs):
        if self.debug_toolbar:
            for panel in self.debug_toolbar.panels:
                panel.process_view(request, view_func, view_args, view_kwargs)

    def process_response(self, request, response):
        if not self.debug_toolbar:
            return response
        if self.debug_toolbar.config.intercept_redirects:
            if isinstance(response, HttpResponseRedirect):
                redirect_to = response.get('Location', None)
                if redirect_to:
                    response = render_to_response(
                        'debug_toolbar/redirect.html',
                        {'redirect_to': redirect_to}
                    )
        if response.status_code != 200:
            return response
        for panel in self.debug_toolbar.panels:
            panel.process_response(request, response)
        if response['Content-Type'].split(';')[0] in _HTML_TYPES:
            if self.debug_toolbar.config.logging_enabled:
                uid = self.debug_toolbar.serialize()
                response.set_cookie('debug_toolbar_detail_url', value='http://%s:%s/__debug__/logs/%s/' % (request.META['SERVER_NAME'], request.META['SERVER_PORT'], uid))
            if self.debug_toolbar.config.toolbar_enabled:
                response.content = replace_insensitive(smart_unicode(response.content), u'</body>', smart_unicode(self.debug_toolbar.render_toolbar() + u'</body>'))
        return response
Ejemplo n.º 2
0
class DebugToolbarMiddleware(object):
    """
    Middleware to set up Debug Toolbar on incoming request and render toolbar
    on outgoing response.
    """
    def __init__(self):
        self.debug_toolbar = None
        self.original_urlconf = settings.ROOT_URLCONF
        self.original_pattern = patterns(
            '',
            ('', include(self.original_urlconf)),
        )
        self.override_url = True

    def show_toolbar(self, request):
        if not settings.DEBUG:
            return False
        if request.is_ajax():
            return False
        if settings.INTERNAL_IPS and request.META.get(
                'REMOTE_ADDR') not in settings.INTERNAL_IPS:
            return False
        return True

    def process_request(self, request):
        if self.override_url:
            debug_toolbar.urls.urlpatterns += self.original_pattern
            self.override_url = False
        request.urlconf = 'debug_toolbar.urls'

        if self.show_toolbar(request):
            self.debug_toolbar = DebugToolbar(request)
            for panel in self.debug_toolbar.panels:
                panel.process_request(request)

        return None

    def process_view(self, request, view_func, view_args, view_kwargs):
        if self.debug_toolbar:
            for panel in self.debug_toolbar.panels:
                panel.process_view(request, view_func, view_args, view_kwargs)

    def process_response(self, request, response):
        if not self.debug_toolbar:
            return response
        if self.debug_toolbar.config.intercept_redirects:
            if isinstance(response, HttpResponseRedirect):
                redirect_to = response.get('Location', None)
                if redirect_to:
                    response = render_to_response(
                        'debug_toolbar/redirect.html',
                        {'redirect_to': redirect_to})
        if response.status_code != 200:
            return response
        for panel in self.debug_toolbar.panels:
            panel.process_response(request, response)
        if response['Content-Type'].split(';')[0] in _HTML_TYPES:
            if self.debug_toolbar.config.logging_enabled:
                uid = self.debug_toolbar.serialize()
                response.set_cookie('debug_toolbar_detail_url',
                                    value='http://%s:%s/__debug__/logs/%s/' %
                                    (request.META['SERVER_NAME'],
                                     request.META['SERVER_PORT'], uid))
            if self.debug_toolbar.config.toolbar_enabled:
                response.content = replace_insensitive(
                    smart_unicode(response.content), u'</body>',
                    smart_unicode(self.debug_toolbar.render_toolbar() +
                                  u'</body>'))
        return response