657 Stimmen

Wie debuggt man in Django, auf die gute Art?

Also habe ich angefangen, Code zu lernen in Python und später Django . Die ersten Male war es schwer, Tracebacks zu betrachten und tatsächlich herauszufinden, was ich falsch gemacht habe und wo der Syntaxfehler lag. Inzwischen ist einige Zeit vergangen und ich denke, ich habe inzwischen eine gewisse Routine im Debuggen meines Django-Codes. Da ich das schon früh in meiner Programmierpraxis gemacht habe, habe ich mich hingesetzt und mich gefragt, ob die Art und Weise, wie ich das gemacht habe, ineffektiv war und ob man das schneller machen könnte. Normalerweise schaffe ich es, die Fehler in meinem Code zu finden und zu korrigieren, aber ich frage mich, ob ich es schneller machen sollte.

Ich benutze normalerweise nur die Debug-Informationen, die Django ausgibt, wenn sie aktiviert sind. Wenn die Dinge so enden, wie ich es mir gedacht habe, unterbreche ich den Codefluss oft mit einem Syntaxfehler und schaue mir die Variablen an diesem Punkt im Fluss an, um herauszufinden, wo der Code etwas anderes tut als das, was ich wollte.

Aber kann dies verbessert werden? Gibt es gute Tools oder bessere Möglichkeiten, Ihren Django-Code zu debuggen?

3 Stimmen

Ich verwende gerne django-debug-toolbar, es ist sehr praktisch

3 Stimmen

Oder verwenden Sie den in Visual Studio Code integrierten Python-Debugger, wie hier beschrieben code.visualstudio.com/docs/python/tutorial-django

611voto

simplyharsh Punkte 33444

Es gibt eine Reihe von Möglichkeiten, aber die einfachste ist, einfach die Python-Debugger . Fügen Sie einfach folgende Zeile in eine Django-View-Funktion:

import pdb; pdb.set_trace()

o

breakpoint()  #from Python3.7

Wenn Sie versuchen, diese Seite in Ihrem Browser zu laden, bleibt der Browser hängen und Sie erhalten eine Aufforderung, das Debugging bei tatsächlich ausgeführtem Code fortzusetzen.

Es gibt jedoch auch andere Möglichkeiten (die ich nicht empfehle):

* return HttpResponse({variable to inspect})

* print {variable to inspect}

* raise Exception({variable to inspect})

Aber der Python Debugger (pdb) ist für alle Arten von Python-Code sehr zu empfehlen. Wenn Sie bereits mit pdb vertraut sind, sollten Sie auch einen Blick auf IPDB die die ipython für die Fehlersuche.

Einige weitere nützliche Erweiterungen für pdb sind

pdb++ , vorgeschlagen von Antash .

pudb , vorgeschlagen von PatDuJour .

Verwendung des Python-Debuggers in Django , vorgeschlagen von Seefänge .

70 Stimmen

+1 für den Vorschlag von pdb. Es ist jedoch erwähnenswert, dass dies nur wirklich funktioniert, wenn Sie den Entwicklungsserver auf Ihrem lokalen Rechner verwenden, da die Eingabeaufforderung in der Konsole angezeigt wird.

14 Stimmen

Siehe auch django-pdb wie in meiner Antwort unten beschrieben. Gibt Ihnen manage.py runserver --pdb y manage.py test --pdb Befehle.

5 Stimmen

@Daniel, siehe rconsole um eine Konsole in eine bereits laufende Instanz von Python einzubinden.

236voto

Benjamin Wohlwend Punkte 29432

Ich mag wirklich Werkzeug dem interaktiven Debugger. Er ist ähnlich wie die Debug-Seite von Django, mit dem Unterschied, dass Sie auf jeder Ebene des Tracebacks eine interaktive Shell erhalten. Wenn Sie die django-erweiterungen erhalten Sie eine runserver_plus der den Entwicklungsserver startet und Ihnen den Werkzeug-Debugger für Ausnahmen zur Verfügung stellt.

Natürlich sollten Sie dies nur lokal ausführen, da es jedem mit einem Browser die Rechte gibt, beliebigen Python-Code im Kontext des Servers auszuführen.

2 Stimmen

Ist es möglich, die Tabulatorvervollständigung in der interaktiven Konsole des Browsers zu verwenden? Mit "Tab" gelangen wir nur zur nächsten geöffneten Konsole. Ich habe mich gefragt, ob es eine Tastenkombination gibt, aber ich konnte keine finden.

0 Stimmen

@Ariel der werkzeug debugger hat keine Tabulatorvervollständigung.

0 Stimmen

Wenn Sie APIs debuggen, können Sie versuchen django-rundbg die den Werkzeug-Debugger ein wenig aufpeppt.

174voto

Koobz Punkte 6780

Ein kleiner Quickie für Vorlagen-Tags:

@register.filter 
def pdb(element):
    import pdb; pdb.set_trace()
    return element

Innerhalb einer Vorlage können Sie nun Folgendes tun {{ template_var|pdb }} und rufen Sie eine pdb-Sitzung auf (vorausgesetzt, Sie verwenden den lokalen Entwicklungsserver), in der Sie Folgendes überprüfen können element nach Lust und Laune.

Auf diese Weise können Sie sehen, was mit Ihrem Objekt passiert ist, wenn es in der Vorlage ankommt.

1 Stimmen

Das ist großartig. Eine andere Sache, die Sie tun können, wenn Sie Probleme mit Templates haben, ist der Wechsel zu jinja2 (geladen durch coffin) - es ist eine Erweiterung von django Templates, die meiner Meinung nach eine Verbesserung ist. Es integriert auch Vorlagen und Vorlagenvererbung in Traceback-Frames viel besser als django tut.

0 Stimmen

Das ist schön. Leider ist es schwer, einen sauberen Weg zu sehen, dies in eine Codebasis zu integrieren, die jeden Commit verweigert, der einen Import von pdb enthält.

86voto

Van Gale Punkte 42727

Es gibt ein paar Tools, die gut zusammenarbeiten und Ihnen die Fehlersuche erleichtern können.

Am wichtigsten ist die Django-Debug-Symbolleiste .

Dann brauchen Sie eine gute Protokollierung mit dem Python Protokollierung Einrichtung. Sie können die Protokollausgabe an eine Protokolldatei senden, aber eine einfachere Möglichkeit ist das Senden der Protokollausgabe an firepython . Um dies zu nutzen, müssen Sie den Firefox-Browser mit dem Feuerteufel Erweiterung. Firepython enthält ein Firebug-Plugin, das jede serverseitige Protokollierung in einer Firebug-Registerkarte anzeigt.

Firebug selbst ist auch für das Debugging der Javascript-Seite einer von Ihnen entwickelten Anwendung von entscheidender Bedeutung. (Vorausgesetzt, Sie haben einige JS-Code natürlich).

Ich mochte auch django-viewtools zum interaktiven Debuggen von Ansichten mit pdb, aber ich benutze es nicht so oft.

Es gibt nützlichere Tools wie Dozer, um Speicherlecks aufzuspüren (es gibt auch andere gute Vorschläge, die in Antworten hier auf SO für die Speicherverfolgung gegeben wurden).

72voto

PhoebeB Punkte 8029

Ich benutze PyCharm (dieselbe pydev-Engine wie eclipse). Wirklich hilft mir, visuell in der Lage sein, durch meinen Code Schritt und sehen, was passiert.

2 Stimmen

Das Beste daran ist, dass es einfach funktioniert und völlig intuitiv ist. Klicken Sie einfach auf die linke Seite einer Zeile und drücken Sie die Debug-Schaltfläche. Es funktioniert auch gut für Django-Quellcode, wenn Sie ein besseres Verständnis dafür bekommen wollen, wie der interne Code funktioniert. Ich habe eine Weile gebraucht, bis ich es bemerkt habe, aber man kann Haltepunkte in jedem Code im Ordner External Libraries des Datei-Navigators setzen.

6 Stimmen

Es ist erwähnenswert, dass PyCharm den PyDev-Debugger unter der Haube für Credits verwendet.

1 Stimmen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X