644 votes

Comment déboguer dans Django, la bonne façon?

Donc, j'ai commencé à apprendre à coder en Python et plus tard de Django. La première fois c'était dur de regarder un retraçage et de réellement comprendre ce que je fait de mal et où l'erreur de syntaxe a été. Après un certain temps maintenant, et d'une certaine façon le long de la route, je suppose que je suis une routine dans le débogage mon Django code. Comme cela a été fait au début de ma programmation, je me suis assis et je me demandais si je faisais cela a été inefficace et pourrait être fait plus rapidement. J'ai l'habitude de gérer de trouver et de corriger les bugs dans mon code, mais je me demande si je devrais le faire plus vite?

J'ai l'habitude de simplement utiliser les informations de débogage Django donne lorsqu'il est activé. Quand les choses ne finissent comme je le pensais, je me casse le flux de code beaucoup avec une erreur de syntaxe, et de regarder les variables à ce point dans le flux de la figure, où le code n'est autre chose que ce que je voulais.

Mais cela peut-il être amélioré? Peut-il y avoir de bons outils ou de meilleures façons de déboguer votre Django code?

598voto

simplyharsh Points 11663

Il y a des tas de façons de le faire, mais le plus simple est de simplement utiliser le Python débogueur. Ajoutez simplement la ligne suivante dans un Django vue de la fonction:

import pdb; pdb.set_trace()

Si vous essayez de charger la page dans votre navigateur, le navigateur se bloque et vous obtenez une invite à porter sur le débogage sur le montant réel de l'exécution de code.

Cependant, il existe d'autres options proposées par les autres (je ne les recommande pas):

* return HttpResponse({variable to inspect})

* print {variable to inspect}

* raise Exception({variable to inspect})

Mais le Python Débogueur (apb) est fortement recommandée pour tous les types de code Python. Si vous êtes déjà dans apb, vous voulez également d'avoir un regard sur IPDB qui utilise ipython pour le débogage. Heureux De Codage.

Une référence utile fournie par Seafangs : à l'Aide de l'Python débogueur dans Django

234voto

Benjamin Wohlwend Points 14976

J'aime vraiment Werkzeug's débogueur interactif. Il est similaire à Django debug page, sauf que vous obtenez un shell interactif sur chaque niveau de la traçabilité en amont. Si vous utilisez le django-extensions, vous obtenez un runserver_plus gestion de commande qui démarre le serveur de développement et vous donne Werkzeug du débogueur sur les exceptions.

Bien sûr, vous ne devez exécuter localement, comme il le donne à n'importe qui avec un navigateur les droits à l'exécution arbitraire de code python dans le contexte du serveur.

174voto

Koobz Points 4224

Un petit quickie pour les balises de gabarit:

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

Maintenant, dans un modèle, vous pouvez faire {{ template_var|pdb }} et entrer une session pdb (étant donné que vous utilisez le serveur de développement local) où vous pouvez inspecter element au contenu de votre coeur.

C'est une très bonne façon de voir ce qui est arrivé à votre objet quand il arrive au template.

84voto

Van Gale Points 21982

Il existe quelques outils qui coopèrent bien et qui peut rendre votre tâche de débogage plus facile.

Le plus important est le Django debug toolbar.

Ensuite, vous avez besoin de journalisation à l'aide de Python journalisation de l' établissement. Vous pouvez envoyer la sortie d'enregistrement dans un fichier journal, mais une option plus simple est d'envoyer la sortie du journal de firepython. Pour l'utiliser, vous devez utiliser le navigateur Firefox avec firebug extension. Firepython comprend un plugin firebug qui permettra d'afficher n'importe quel serveur de connexion côté dans un "gendarme" de l'onglet.

Firebug est également critique pour le débogage du Javascript côté de n'importe quelle application que vous développez. (En supposant que vous avez quelques code JS, bien sûr).

J'ai aussi aimé django-viewtools pour le débogage des points de vue de manière interactive à l'aide de l'apb, mais je ne l'utilise pas tant que ça.

Il y a des outils plus utiles comme des bulldozers pour la traque des fuites de mémoire (il y a aussi d'autres bonnes suggestions données dans les réponses ici DONC, pour le suivi de la mémoire).

44voto

Tomasz Zielinski Points 9300

Presque tout a été mentionné jusqu'ici, donc j'ajoute seulement qu'au lieu de pdb.set_trace() on peut utiliser ipdb.set_trace () qui utilise iPython et donc est plus puissant (autocomplete et autres goodies). Cela nécessite un paquet ipdb, donc il faut easy_install ipdb

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X