Question Comment déboguer dans Django, la bonne façon? [fermé]


J'ai donc commencé à apprendre à coder Python et ensuite Django. Les premières fois, il était difficile de regarder les retraçages et de comprendre ce que j'avais mal fait et où était l'erreur de syntaxe. Un peu de temps s'est écoulé maintenant et d'une certaine manière, je suppose que j'ai une routine pour déboguer mon code Django. Comme cela a été fait au début de mon expérience de codage, je me suis assis et je me suis demandé si ce que je faisais était inefficace et pouvait être fait plus rapidement. Je parviens généralement à trouver et corriger les bugs dans mon code, mais je me demande si je devrais le faire plus vite?

En général, j'utilise simplement les informations de débogage que Django donne lorsqu'il est activé. Quand les choses finissent comme je le pensais, je casse beaucoup le flux de code avec une erreur de syntaxe, et je regarde les variables à ce point dans le flux pour comprendre, où le code fait autre chose que ce que je voulais.

Mais cela peut-il être amélioré? Existe-t-il de bons outils ou de meilleurs moyens pour déboguer votre code Django?


488
2017-07-13 07:57


origine


Réponses:


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

import pdb; pdb.set_trace()

Si vous essayez de charger cette page dans votre navigateur, le navigateur se bloque et vous recevez une invite pour continuer le débogage sur le code d'exécution réel.

Cependant il y a d'autres options (je ne les recommande pas):

* return HttpResponse({variable to inspect})

* print {variable to inspect}

* raise Exception({variable to inspect})

Mais le débogueur Python (pdb) est fortement recommandé pour tous les types de code Python. Si vous êtes déjà dans pdb, vous voudriez aussi jeter un oeil à IPDB qui utilise ipython pour le débogage.

Une extension plus utile de pdb est

pdb ++, suggéré par Antash.

pudb, suggéré par PatDuJour.

Utilisation du débogueur Python dans Django, suggéré par Seafangs.


456
2017-07-13 08:29



J'aime vraiment Werkzeugdébogueur interactif. C'est similaire à la page de débogage de Django, sauf que vous obtenez un shell interactif à chaque niveau de la traceback. Si vous utilisez le django-extensions, vous obtenez un runserver_plus commande de gestion qui lance le serveur de développement et vous donne le débogueur de Werkzeug sur les exceptions.

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


212
2017-07-13 08:54



Un petit quickie pour les balises de gabarit:

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

Maintenant, à l'intérieur d'un modèle que vous pouvez faire {{ template_var|pdb }} et entrez une session pdb (étant donné que vous exécutez 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.


154
2018-02-24 06:52



Il y a quelques outils qui coopèrent bien et peuvent faciliter votre tâche de débogage.

Le plus important est le Barre d'outils de débogage Django.

Ensuite, vous avez besoin d'une bonne journalisation en utilisant le Python enregistrement établissement. Vous pouvez envoyer la sortie de journalisation à un fichier journal, mais une option plus simple envoie la sortie du journal à Firepython. Pour l'utiliser, vous devez utiliser le navigateur Firefox avec le pyromane extension. Firepython inclut un plugin firebug qui affichera toute journalisation côté serveur dans un onglet Firebug.

Firebug lui-même est également essentiel pour déboguer le côté Javascript de toute application que vous développez. (En supposant que vous avez un code JS bien sûr).

j'ai aimé aussi django-viewtools pour déboguer des vues de manière interactive en utilisant pdb, mais je ne l’utilise pas beaucoup.

Il y a des outils plus utiles comme le Dozer pour traquer les fuites de mémoire (il y a aussi d'autres bonnes suggestions données dans les réponses sur SO pour le suivi de la mémoire).


77
2017-07-13 08:30



j'utilise PyCharm (même moteur pydev qu'éclipse). Cela m'aide vraiment à voir visuellement mon code et à voir ce qui se passe.


50
2017-08-12 11:07



Presque tout a été mentionné jusqu'ici, donc je ne ferai qu'ajouter au lieu de pdb.set_trace() on peut utiliser ipdb.set_trace () qui utilise iPython et est donc plus puissant (autocomplete et autres goodies). Cela nécessite un paquet ipdb, donc vous avez seulement besoin de pip install ipdb


40
2018-02-24 07:25



J'ai poussé django-pdb à PyPI. C'est une application simple qui signifie que vous n'avez pas besoin de modifier votre code source chaque fois que vous voulez entrer dans pdb.

L'installation est juste ...

  1. pip install django-pdb
  2. Ajouter 'django_pdb' à ton INSTALLED_APPS

Vous pouvez maintenant exécuter: manage.py runserver --pdb de pénétrer dans pdb au début de chaque vue ...

bash: manage.py runserver --pdb
Validating models...

0 errors found
Django version 1.3, using settings 'testproject.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

GET /
function "myview" in testapp/views.py:6
args: ()
kwargs: {}

> /Users/tom/github/django-pdb/testproject/testapp/views.py(7)myview()
-> a = 1
(Pdb)

Et courir: manage.py test --pdb briser le pdb sur les échecs / erreurs de test ...

bash: manage.py test testapp --pdb
Creating test database for alias 'default'...
E
======================================================================
>>> test_error (testapp.tests.SimpleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../django-pdb/testproject/testapp/tests.py", line 16, in test_error
    one_plus_one = four
NameError: global name 'four' is not defined
======================================================================

> /Users/tom/github/django-pdb/testproject/testapp/tests.py(16)test_error()
-> one_plus_one = four
(Pdb)

Le projet hébergé sur GitHub, bien entendu, les contributions sont les bienvenues.


30
2017-07-30 00:11



Le moyen le plus simple de déboguer Python - en particulier pour les programmeurs qui sont utilisés avec Visual Studio - est d'utiliser PTVS (Python Tools for Visual Studio). Les étapes sont simples:

  1. Téléchargez et installez-le depuis http://pytools.codeplex.com/ 
  2. Définissez des points d'arrêt et appuyez sur F5.
  3. Votre point d'arrêt est atteint, vous pouvez afficher / modifier les variables aussi facilement que les programmes C # / C ++ de débogage.
  4. C'est tout :)

Si vous souhaitez déboguer Django en utilisant PTVS, vous devez procéder comme suit:

  1. Dans l'onglet Paramètres du projet - Général, définissez "Fichier de démarrage" sur "manage.py", le point d'entrée du programme Django.
  2. Dans Paramètres du projet - onglet Debug, définissez "Arguments de script" sur "runserver --noreload". Le point clé est le "--noreload" ici. Si vous ne le définissez pas, vos points d'arrêt ne seront pas touchés.
  3. Profitez-en.

19
2018-04-06 06:09



j'utilise pyDev avec Eclipse vraiment bon, définir des points de rupture, entrer dans le code, afficher les valeurs sur tous les objets et variables, essayez-le.


14
2017-07-13 08:40



j'utilise PyCharm et restez-y tout le temps. Cela m'a coûté un peu, mais je dois dire que l'avantage que j'en retire est inestimable. J'ai essayé de déboguer de la console et je donne beaucoup de crédit aux gens qui peuvent le faire, mais pour moi, pouvoir déboguer visuellement mes applications est génial.

Je dois dire cependant, PyCharm prend beaucoup de mémoire. Mais encore une fois, rien de bon n'est gratuit dans la vie. Ils viennent avec leur dernière version 3. Il joue aussi très bien avec Django, Flask et Google AppEngine. Donc, dans l'ensemble, je dirais que c'est un excellent outil pratique pour tout développeur.

Si vous ne l'utilisez pas encore, je vous recommande d'obtenir la version d'essai pendant 30 jours pour jeter un coup d'oeil à la puissance de PyCharm. Je suis sûr que d'autres outils sont également disponibles, tels que Aptana. Mais je suppose que j'aime aussi la façon dont PyCharm a l'air. Je me sens très à l'aise pour déboguer mes applications là-bas.


10
2017-10-08 14:18