Отладка ошибок приложения
В рабочей среде
Не запускайте сервер разработки или встроенный отладчик в рабочей среде. Отладчик позволяет выполнять произвольный Python-код из браузера. Он защищён пином, но на этом нельзя полагаться в плане безопасности.
Используйте инструмент ведения журнала ошибок, такой как Sentry, как описано в Инструментах ведения журнала ошибок, или включите ведение журнала и уведомления, как описано в Ведение журнала.
Если у вас есть доступ к серверу, вы можете добавить код для запуска внешнего отладчика, если request.remote_addr соответствует вашему IP-адресу. Некоторые отладчики IDE также имеют режим удалённого доступа, чтобы взаимодействовать с точками останова на сервере локально. Включайте отладчик только временно.
Встроенный отладчик
Встроенный сервер разработки Werkzeug предоставляет отладчик, который отображает интерактивный стек вызовов в браузере при возникновении необработанной ошибки во время запроса. Этот отладчик следует использовать только во время разработки.
Предупреждение
Отладчик позволяет выполнять произвольный Python-код из браузера. Он защищён пином, но всё равно представляет собой серьёзную угрозу безопасности. Не запускайте сервер разработки или отладчик в рабочей среде.
Отладчик включен по умолчанию, когда сервер разработки запускается в режиме отладки.
$ flask --app hello run --debug
При запуске из Python-кода передача debug=True включает режим отладки, который в основном эквивалентен.
app.run(debug=True)
Сервер разработки и Командная строка содержат больше информации о запуске отладчика и режиме отладки. Дополнительную информацию об отладчике можно найти в документации Werkzeug.
Внешние отладчики
Внешние отладчики, такие как те, которые предоставляются IDE, могут предложить более мощный опыт отладки, чем встроенный отладчик. Их также можно использовать для пошагового выполнения кода во время запроса до возникновения ошибки или если ошибка не возникла. Некоторые из них даже имеют режим удалённого доступа, так что вы можете отлаживать код, работающий на другом компьютере.
При использовании внешнего отладчика приложение должно всё ещё быть в режиме отладки, в противном случае Flask превращает необработанные ошибки в общие страницы ошибок 500. Однако встроенный отладчик и перезагрузчик должны быть отключены, чтобы они не мешали внешнему отладчику.
$ flask --app hello run --debug --no-debugger --no-reload
При запуске из Python:
app.run(debug=True, use_debugger=False, use_reloader=False)
Отключение этого не требуется, внешний отладчик продолжит работать с приведенными ниже оговорками.
- Если встроенный отладчик не отключён, он перехватит необработанные исключения прежде, чем сможет внешний отладчик.
- Если перезагрузчик не отключён, он может вызвать непредвиденную перезагрузку, если код изменится во время точки останова.
-
Сервер разработки по-прежнему будет перехватывать необработанные исключения, если встроенный отладчик отключён, иначе он аварийно завершится при любой ошибке. Если вам это нужно (а обычно это не так), передайте
passthrough_errors=Trueвapp.run.app.run( debug=True, passthrough_errors=True, use_debugger=False, use_reloader=False )
© 2010 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/3.0.x/debugging/