Django-debug-toolbar: Symbolleiste wird bei POST-Anfragen nicht angezeigt

Erstellt am 4. Okt. 2017  ·  6Kommentare  ·  Quelle: jazzband/django-debug-toolbar

Hallo, ich versuche , ein Problem zu debuggen , wo POST Anfragen nicht die Symbolleiste verursachen zu zeigen, für alle anderen GET Anfrage, die Debug - Toolbar zeigt ganz gut, scheint nicht zu ein Problem für andere Benutzer sein, daher frage ich mich, ob etwas dazu führt, dass die Symbolleiste nicht ausgelöst wird oder ob dies keine unterstützte Funktion ist.

Dies geschieht nur auf Anfrage an ViewSets , ModelViewSet vom Django Rest Framework, scheint gut zu funktionieren, wie kann ich herausfinden, was falsch ist?

Hilfreichster Kommentar

Hier ist meine Middleware, um dieses Problem zu umgehen:

def Fix_XMLHttpRequest(get_response):
    def middleware(request):
        # When `POST`ing data from the DRF browsable API, it will set the
        # header `X_REQUESTED_WITH: XMLHttpRequest`. (Not sure if the browser
        # adds that header of if DRF's front-end does, but that doesn't matter,
        # the header is there.) It's a little contradictory that the header is
        # there since the browser also requests that the response be 'text/html'.
        # Anyway, that's fine except for one thing. Django Debug Toolbar will
        # not show the debug toolbar whenever that header is set on the request!
        #
        # See:
        #   - https://github.com/jazzband/django-debug-toolbar/blob/c201ce34cea3ba4ce99d1642db17f2cb31c6204e/debug_toolbar/middleware.py#L59
        #   - https://docs.djangoproject.com/en/2.1/_modules/django/http/request/#HttpRequest.is_ajax
        #
        # My workaround is to remove that header whenever the request explicitly
        # asks for 'text/html'. Again, in my opinion, that header doesn't really
        # make sense anyway when the browser wants to receive HTML back.
        #
        # This makes is so that when you POST data from the DRF browsable API,
        # you can still see the Django Debug Toolbar. It maintains the desired
        # behavior of _not_ showing the toolbar when you POST from Javascript
        # to obtain JSON data.

        if 'text/html' in request.META.get('HTTP_ACCEPT', ''):
            if request.META.get('HTTP_X_REQUESTED_WITH', '') == 'XMLHttpRequest':
                del request.META['HTTP_X_REQUESTED_WITH']

        response = get_response(request)

        return response

    return middleware

Stellen Sie sicher, dass Sie diese Middleware _vor_ der Middleware Ihrer Django Debug Toolbar hinzufügen.

Alle 6 Kommentare

Ich würde hier https://github.com/jazzband/django-debug-toolbar/blob/master/debug_toolbar/middleware.py#L58 beginnen , bzw. mit dem SHOW_TOOLBAR_CALLBACK .

Ich bin mir nicht sicher, warum POST-Anfragen von der Symbolleiste ignoriert werden?

Hier ist meine Middleware, um dieses Problem zu umgehen:

def Fix_XMLHttpRequest(get_response):
    def middleware(request):
        # When `POST`ing data from the DRF browsable API, it will set the
        # header `X_REQUESTED_WITH: XMLHttpRequest`. (Not sure if the browser
        # adds that header of if DRF's front-end does, but that doesn't matter,
        # the header is there.) It's a little contradictory that the header is
        # there since the browser also requests that the response be 'text/html'.
        # Anyway, that's fine except for one thing. Django Debug Toolbar will
        # not show the debug toolbar whenever that header is set on the request!
        #
        # See:
        #   - https://github.com/jazzband/django-debug-toolbar/blob/c201ce34cea3ba4ce99d1642db17f2cb31c6204e/debug_toolbar/middleware.py#L59
        #   - https://docs.djangoproject.com/en/2.1/_modules/django/http/request/#HttpRequest.is_ajax
        #
        # My workaround is to remove that header whenever the request explicitly
        # asks for 'text/html'. Again, in my opinion, that header doesn't really
        # make sense anyway when the browser wants to receive HTML back.
        #
        # This makes is so that when you POST data from the DRF browsable API,
        # you can still see the Django Debug Toolbar. It maintains the desired
        # behavior of _not_ showing the toolbar when you POST from Javascript
        # to obtain JSON data.

        if 'text/html' in request.META.get('HTTP_ACCEPT', ''):
            if request.META.get('HTTP_X_REQUESTED_WITH', '') == 'XMLHttpRequest':
                del request.META['HTTP_X_REQUESTED_WITH']

        response = get_response(request)

        return response

    return middleware

Stellen Sie sicher, dass Sie diese Middleware _vor_ der Middleware Ihrer Django Debug Toolbar hinzufügen.

Ich bin mir nicht sicher, ob es in Ordnung ist oder nicht. Ich versuche, viele Möglichkeiten zu verwenden, um die Post-Anfrage zu erfassen, kann es aber immer noch nicht. Das heißt, wenn Sie die Anfrage auf der Website mit der Methode "get" verwenden, ist dies offensichtlich kein Problem. Der Zweck, den ich Django verwende, ist die Entwicklung des Servers für den mobilen Client und die meisten Anfragemethoden sind 'POST'. Hoffe ihr könnt mir helfen, schätze.

Was für mich funktioniert hat (in Kombination mit der durchsuchbaren API des Django REST Frameworks) ist diese django-debug-toolbar-history .

django-debug-toolbar-history hat auch bei mir mit den durchsuchbaren DRF-Entwicklerseiten funktioniert.

Dadurch konnte ich die während eines POST verwendeten SQL-Abfragen verfolgen.

Wird geschlossen, da das Verlaufsfenster freigegeben wurde. Ich habe auch bestätigt, dass für POST-Anfragen, die zurückgegeben werden, und HTML-Antworten die erste Symbolleiste angezeigt wird.

Wenn Sie auf die neueste Version aktualisieren und weiterhin ein Fehler auftritt, öffnen Sie bitte mit neuen Details erneut. Vielen Dank.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen