Итак, я начал учиться программировать на Python, а затем и на Django . В первый раз было трудно смотреть на трассировки и на самом деле понять, что я сделал неправильно и где была синтаксическая ошибка. Прошло немного времени, и некоторое время спустя, я думаю, у меня появилась процедура отладки моего кода Django. Так как это было сделано на ранних этапах моего опыта программирования, я сел и подумал, не было ли это как-то неэффективно и могло ли быть сделано быстрее. Мне обычно удается находить и исправлять ошибки в моем коде, но мне интересно, должен ли я делать это быстрее?
Я обычно просто использую отладочную информацию, которую Django дает, когда она включена. Когда все заканчивается так, как я думал, я сильно нарушаю поток кода из-за синтаксической ошибки и смотрю на переменные в этой точке потока, чтобы выяснить, где код делает что-то отличное от того, что я хотел.
Но можно ли это улучшить? Есть ли хорошие инструменты или лучшие способы отладки вашего кода Django?
Ответы:
Есть множество способов сделать это, но самый простой - просто использовать отладчик Python . Просто добавьте следующую строку в функцию просмотра Django:
или
Если вы попытаетесь загрузить эту страницу в своем браузере, браузер зависнет, и вы получите приглашение продолжить отладку в реальном исполняемом коде.
Однако есть и другие варианты (я их не рекомендую):
Но отладчик Python (pdb) настоятельно рекомендуется для всех типов кода Python. Если вы уже знакомы с pdb, вам также стоит взглянуть на IPDB, который использует ipython для отладки.
Еще одно полезное расширение для pdb
pdb ++ , предложенный Antash .
pudb , предложенный PatDuJour .
Использование отладчика Python в Django , предложенного Seafangs .
источник
manage.py runserver --pdb
иmanage.py test --pdb
команды.ipython
также.Ipdb
, который идет сipython
, дополнением вкладки особенностей, цветным синтаксисом, и больше :-).Мне очень нравится интерактивный отладчик Werkzeug . Это похоже на страницу отладки Django, за исключением того, что вы получаете интерактивную оболочку на каждом уровне трассировки. Если вы используете django-extensions , вы получаете
runserver_plus
команду управления, которая запускает сервер разработки и дает вам отладчик Werkzeug для исключений.Конечно, вы должны запускать это только локально, так как это дает любому пользователю с браузером права на выполнение произвольного кода Python в контексте сервера.
источник
python 3.3
Небольшая подсказка для тегов шаблонов:
Теперь внутри шаблона вы можете сделать
{{ template_var|pdb }}
и войти в сеанс pdb (учитывая, что вы используете локальный сервер devel), где вы можете проверитьelement
содержание вашего сердца.Это очень хороший способ увидеть, что случилось с вашим объектом, когда он попадает в шаблон.
источник
Есть несколько инструментов, которые хорошо взаимодействуют и могут облегчить вашу задачу отладки.
Наиболее важной является панель инструментов отладки Django .
Тогда вам нужна хорошая регистрация с помощью средства регистрации Python . Вы можете отправить вывод журнала в файл журнала, но более простой вариант - отправка вывода журнала в firepython . Чтобы использовать это, вам нужно использовать браузер Firefox с расширением firebug . Firepython включает в себя плагин Firebug, который будет отображать все журналы на стороне сервера на вкладке Firebug.
Сам Firebug также важен для отладки Javascript стороны любого приложения, которое вы разрабатываете. (Конечно, если у вас есть JS-код).
Мне также понравился django-viewtools для интерактивной отладки представлений с использованием pdb, но я не так часто его использую.
Существуют более полезные инструменты, такие как бульдозер, для отслеживания утечек памяти (есть также другие полезные предложения, приведенные в ответах на SO по отслеживанию памяти).
источник
Я использую PyCharm (тот же движок Pydev, что и Eclipse). Действительно помогает мне визуально пройти по моему коду и посмотреть, что происходит.
источник
До сих пор почти все было упомянуто, поэтому я только добавлю, что вместо
pdb.set_trace()
одного можно использовать ipdb.set_trace (), который использует iPython и, следовательно, более мощный (автозаполнение и другие полезности). Для этого требуется пакет ipdb, так что вам нужно толькоpip install ipdb
источник
Я подтолкнул
django-pdb
к PyPI . Это простое приложение, которое означает, что вам не нужно редактировать исходный код каждый раз, когда вы хотите взломать pdb.Установка просто ...
pip install django-pdb
'django_pdb'
к вашемуINSTALLED_APPS
Теперь вы можете запустить:
manage.py runserver --pdb
взломать pdb в начале каждого представления ...И запустить:
manage.py test --pdb
взломать pdb на тестовые сбои / ошибки ...Проект размещен на GitHub , материалы приветствуются, конечно.
источник
Самый простой способ отладки Python - особенно для программистов, которые привыкли к Visual Studio - это использование PTVS (Python Tools for Visual Studio). Шаги просты:
Если вы хотите отлаживать Django с помощью PTVS, вам нужно сделать следующее:
источник
Я действительно хорошо использую pyDev с Eclipse, устанавливаю точки останова, шагаю в код, просматриваю значения любых объектов и переменных, пробую это.
источник
Я использую PyCharm и полностью поддерживаю его. Это стоило мне немного, но я должен сказать, что преимущество, которое я получаю от этого, бесценно. Я попробовал отладку с консоли, и я очень благодарен людям, которые могут это сделать, но для меня возможность визуальной отладки моих приложений - это здорово.
Я должен сказать, хотя, PyCharm действительно занимает много памяти. Но опять же, ничего хорошего в жизни не бывает бесплатным. Они только что вышли с последней версией 3. Она также очень хорошо работает с Django, Flask и Google AppEngine. В общем, я бы сказал, что это отличный удобный инструмент для любого разработчика.
Если вы еще не используете его, я бы порекомендовал получить пробную версию на 30 дней, чтобы взглянуть на возможности PyCharm. Я уверен, что есть и другие инструменты, такие как Aptana. Но я думаю, мне просто нравится, как выглядит PyCharm. Я чувствую себя очень комфортно, отлаживая свои приложения там.
источник
Иногда, когда я хочу изучить конкретный метод и вызывать pdb просто слишком громоздко, я бы добавил:
IPython.embed()
запускает оболочку IPython, которая имеет доступ к локальным переменным с того места, где вы ее вызываете.источник
from IPython import embed
а затем всякий раз, когда я хочу быстро добавить точку останова в код, я пишуembed()
. Экономит время. Чтобы не застрять в петлях навсегда, я делаюembed();exit();
pudb
иdebugger;
в JavaScript) в файл, который я редактирую. После того, как я закончил, я простоdd
(удалить всю строку), чтобы удалить точку останова. Это позволяет избежать риска ввода строки импорта отладчика в систему управления версиями или необходимости предварительно настроить импорт в верхней части файла.С моей точки зрения, мы могли бы разбить общие задачи отладки кода на три различных шаблона использования:
assert False
точку останова в коде, просто введите место, в котором вы хотите остановиться.import pudb; pudb.set_trace()
. Основное преимущество перед [i] pdb заключается в том, что PuDB (хотя вы выглядите так, как будто вы в 80-х годах) делает настройку пользовательских выражений часов на одном дыхании. И отладка группы вложенных циклов намного проще с графическим интерфейсом.Ах да, беда шаблонов. Наиболее распространенная (для меня и моих коллег) проблема - это неправильный контекст: либо у вас нет переменной, либо у вашей переменной нет какого-либо атрибута. Если вы используете панель инструментов отладки , просто проверьте контекст в разделе «Шаблоны» или, если этого недостаточно, установите разрыв в коде ваших представлений сразу после того, как ваш контекст заполнен.
Такие вот дела.
источник
import pudb;pu.db
Я настоятельно рекомендую epdb (Extended Python Debugger).
https://bitbucket.org/dugan/epdb
Одна вещь, которая мне нравится в epdb для отладки Django или других веб-серверов Python - это команда epdb.serve (). Это устанавливает трассировку и передает ее на локальный порт, к которому вы можете подключиться. Типичный вариант использования:
У меня есть мнение, что я хочу пройти шаг за шагом. Я вставлю следующее в тот момент, когда я хочу установить трассировку.
После выполнения этого кода я открываю интерпретатор Python и подключаюсь к обслуживающему экземпляру. Я могу проанализировать все значения и пройтись по коду, используя стандартные команды pdb, такие как n, s и т. Д.
И многое другое, что вы можете узнать о наборе справки epdb в любое время.
Если вы хотите обслуживать или подключаться к нескольким экземплярам epdb одновременно, вы можете указать порт для прослушивания (по умолчанию 8080). Т.е.
хост по умолчанию равен localhost, если не указан. Я добавил это здесь, чтобы продемонстрировать, как вы можете использовать это для отладки чего-то другого, кроме локального экземпляра, например сервера разработки в вашей локальной сети. Очевидно, что если вы сделаете это, будьте осторожны, так как заданная трассировка никогда не попадет на ваш рабочий сервер!
В качестве краткого примечания, вы все равно можете сделать то же самое, что и принятый ответ с помощью epdb (
import epdb; epdb.set_trace()
), но я хотел бы выделить функциональность подачи, поскольку я нашел его таким полезным.источник
Я только что нашел wdb ( http://www.rkblog.rk.edu.pl/w/p/debugging-python-code-browser-wdb-debugger/?goback=%2Egde_25827_member_255996401 ). У этого есть довольно хороший пользовательский интерфейс / GUI со всеми прибамбасами. Автор говорит это о WDB -
«Существуют IDE, такие как PyCharm, которые имеют свои собственные отладчики. Они предлагают схожий или равный набор функций ... Однако, чтобы использовать их, вы должны использовать эти конкретные IDE (а некоторые из них не являются бесплатными или могут быть доступны не для всех платформы). Выберите правильный инструмент для ваших нужд. "
Думаю, я просто передам это.
Также очень полезная статья о отладчиках Python: https://zapier.com/engineering/debugging-python-boss/
Наконец , если вы хотите увидеть красивую графическую распечатку вашего стека вызовов в Django, оформите заказ: https://github.com/joerick/pyinstrument . Просто добавьте pyinstrument.middleware.ProfilerMiddleware в MIDDLEWARE_CLASSES, затем добавьте? Profile в конец URL-адреса запроса, чтобы активировать профилировщик.
Можно также запустить pyinstrument из командной строки или путем импорта в качестве модуля.
источник
Добавьте
import pdb; pdb.set_trace()
илиbreakpoint()
(сформируйте python3.7) в соответствующую строку в коде Python и выполните его. Выполнение остановится с помощью интерактивной оболочки. В оболочке вы можете выполнить код Python (например, переменные печати) или использовать такие команды, как:c
продолжить исполнениеn
перейти к следующей строке в той же функцииs
перейти к следующей строке в этой функции или вызываемой функцииq
выйти из отладчика / выполненияТакже смотрите: https://poweruser.blog/setting-a-breakpoint-in-python-438e23fe6b28
источник
Один из лучших вариантов отладки кода Django - через wdb: https://github.com/Kozea/wdb.
Установите и запустите сервер, и в вашем коде добавьте:
По мнению автора, основными отличиями в отношении
pdb
являются:У него отличный браузерный пользовательский интерфейс. Радость в использовании! :)
источник
Я использую PyCharm и различные инструменты отладки. Также есть хорошие статьи о том, как легко настроить эти вещи для новичков. Вы можете начать здесь. Он рассказывает об отладке PDB и GUI в целом с проектами Django. Надеюсь, что кто-то извлечет из них пользу.
источник
Если вы используете Aptana для разработки django, посмотрите это: http://www.youtube.com/watch?v=qQh-UQFltJQ
Если нет, подумайте об использовании.
источник
Большинство вариантов уже упоминалось. Чтобы напечатать контекст шаблона, я создал для этого простую библиотеку. Смотрите https://github.com/edoburu/django-debugtools
Вы можете использовать его для печати контекста шаблона без какой-либо
{% load %}
конструкции:Для отображения переменных в
<pre>
теге используется настраиваемый формат pprint .источник
Я считаю, что Visual Studio Code отлично подходит для отладки приложений Django. Стандартные параметры python launch.json запускаются
python manage.py
с подключенным отладчиком, поэтому вы можете устанавливать точки останова и шагать по своему коду по своему усмотрению .источник
Для тех, кто может случайно добавить pdb в живые коммиты, я могу предложить следующее расширение ответа #Koobz:
источник
Исходя из собственного опыта, есть два пути:
используйте ipdb , который является расширенным отладчиком, как pdb.
import ipdb;ipdb.set_trace()
илиbreakpoint()
(из python3.7)используйте оболочку django, просто используйте команду ниже. Это очень полезно, когда вы разрабатываете новый вид.
python manage.py shell
источник
Я настоятельно рекомендую использовать PDB.
Вы можете проверить все значения переменных, перейти к функции и многое другое. https://docs.python.org/2/library/pdb.html
для проверки всех видов запросов, ответов и обращений к базе данных. Я использую django-debug-toolbar https://github.com/django-debug-toolbar/django-debug-toolbar
источник
Как уже упоминалось в других постах здесь - установка точек останова в вашем коде и просмотр кода, чтобы увидеть, ведет ли он себя так, как вы ожидали, - отличный способ изучить что-то вроде Django, пока вы не поймете, как все это ведет себя - и каков ваш код делается.
Для этого я бы рекомендовал использовать WingIde. Как и в других упомянутых средах IDE: приятный и простой в использовании, приятный макет, а также легко устанавливаемые точки останова для оценки / изменения стека и т. Д. Идеально подходит для визуализации того, что делает ваш код, когда вы проходите через него. Я большой поклонник этого.
Также я использую PyCharm - он имеет отличный статический анализ кода и может помочь иногда обнаружить проблемы, прежде чем вы поймете, что они есть.
Как уже упоминалось, django-debug-toolbar имеет важное значение - https://github.com/django-debug-toolbar/django-debug-toolbar
И хотя это явно не инструмент отладки или анализа - одним из моих любимых является промежуточное программное обеспечение для печати SQL, доступное от Django Snippets по адресу https://djangosnippets.org/snippets/290/
Это отобразит запросы SQL, сгенерированные вашим представлением. Это даст вам хорошее представление о том, что делает ORM, и если ваши запросы эффективны или вам нужно переработать код (или добавить кеширование).
Я считаю его бесценным для отслеживания производительности запросов при разработке и отладке моего приложения.
Еще один совет - я немного изменил его для своего собственного использования, чтобы показывать только сводку, а не оператор SQL .... Поэтому я всегда использую его при разработке и тестировании. Я также добавил, что если len (connection.queries) превышает предварительно заданный порог, отображается дополнительное предупреждение.
Затем, если я замечаю, что происходит что-то плохое (с точки зрения производительности или количества запросов), я возвращаюсь к полному отображению операторов SQL, чтобы точно увидеть, что происходит. Очень удобно, когда вы работаете над большим проектом Django с несколькими разработчиками.
источник
использовать
pdb
илиipdb
. Разница между этими двумя аспектами заключается в том, что ipdb поддерживает автозаполнение.для PDB
для ipdb
Для выполнения
n
нажатия новой строки , для продолженияc
нажатия клавиши. проверить больше вариантов с помощьюhelp(pdb)
источник
Дополнительное предложение.
Вы можете использовать тесты носа и pdb вместе, вместо этого вводя
pdb.set_trace()
в свои представления вручную. Преимущество состоит в том, что вы можете наблюдать ошибки при их первом запуске, возможно, в стороннем коде.Вот ошибка для меня сегодня.
Теперь я знаю, что это означает, что я обманываю конструктор для формы, и у меня даже есть хорошее представление о том, какое поле является проблемой. Но можно ли использовать pdb, чтобы увидеть, на что жалуются хрустящие формы в шаблоне ?
Да, я могу. Использование параметра --pdb в тестах на нос:
tests$ nosetests test_urls_catalog.py --pdb
Как только я нажимаю на любое исключение (в том числе обработанное изящно), pdb останавливается там, где это происходит, и я могу осмотреться.
Теперь ясно, что мой аргумент выбора для хрустящего конструктора поля был как список внутри списка, а не как список / кортеж кортежей.
Замечательно то, что этот pdb находится в коде crispy, а не в моем, и мне не нужно было вставлять его вручную.
источник
Во время разработки добавление быстрого
может помочь диагностировать проблемы в представлениях или где-либо еще, без необходимости использовать отладчик.
источник