Как отлаживать приложение Flask


134

Как вы собираетесь отлаживать ошибки во Flask? Распечатать в консоль? Быстрые сообщения на страницу? Или есть более мощный способ выяснить, что происходит, когда что-то идет не так?


5
В этом нет ничего волшебного app.run()(ни с включенной, ни с выключенной отладкой). Flask ведет себя как любое другое приложение на Python, поэтому вы можете отлаживать его так же, как отлаживаете любое приложение Python. Если вы хотите использовать ведение журнала, используйте ведение журнала. Если хотите распечатать, используйте распечатки. Вы даже можете использовать отладчик, если хотите.
Марк Хилдрет

Ответы:


128

Запуск приложения в режиме разработки покажет интерактивную трассировку и консоль в браузере при возникновении ошибки. Чтобы запустить в режиме разработки, установите FLASK_ENV=developmentпеременную среды, затем используйте flask runкоманду (не забудьте указать и FLASK_APPна свое приложение).

Для Linux, Mac, подсистемы Linux для Windows, Git Bash для Windows и т. Д .:

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

Для Windows CMD используйте setвместо экспорта:

set FLASK_ENV=development

Для PowerShell используйте $env:

$env:FLASK_ENV = "development"

До Flask 1.0 это контролировалось FLASK_DEBUG=1переменной среды.

Если вы используете app.run()метод вместо flask runкоманды, перейдите, debug=Trueчтобы включить режим отладки.

Трассировки также выводятся на терминал, на котором запущен сервер, независимо от режима разработки.

Если вы используете PyCharm, VS Code и т. Д., Вы можете воспользоваться его отладчиком для пошагового выполнения кода с точками останова. Конфигурация запуска может указывать на вызов сценария app.run(debug=True, use_reloader=False)или указывать его наvenv/bin/flask сценарий и использовать его, как в командной строке. Вы можете оставить перезагрузку отключенной, но перезагрузка убьет контекст отладки, и вам придется снова поймать точку останова.

Вы также можете использовать pdb, pudb или другой отладчик терминала, вызвав set_traceто представление, с которого вы хотите начать отладку.


Не используйте слишком широкие блоки, кроме блоков. Окружение всего вашего кода универсальным кодом try... except...заставит замолчать ошибку, которую вы хотите отладить. В общем, в этом нет необходимости, поскольку Flask уже обрабатывает исключения, показывая отладчик или ошибку 500 и выводя трассировку на консоль.


38

Вы можете использовать app.run(debug=True)для редактирования Werkzeug Debugger, как указано ниже, и я должен был знать.


7
На самом деле, когда вы работаете с debug=Trueвами, вы фактически используете отладчик Werkzeug, так что это не либо-либо ;-)
Шон Виейра,

Ха, ты прав. Думаю, мне следовало посмотреть на файл setup.py Flask на предмет требований. Я использую его модифицированную копию для работы в GAE, где вам нужно инициализировать Werkzeug вручную.
bnlucas

Я установил app.run (debug = True), если я напечатаю xyz, куда он печатает, спасибо
Кимми

Использование print 'xyz'будет печатать на консоли. Если вы хотите отлаживать в браузере, вам нужно будет принудительно выдать ошибку в том месте, где вы хотите отлаживать. raise Exception('xyz'), Это приведет к тому, что отладка будет выводиться в окне браузера.
bnlucas

25

Из 1.1.xдокументации вы можете включить режим отладки, экспортировав переменную среды в приглашение оболочки:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

4
Этот ответ был бы более полезным, если бы он объяснил, что такое режим отладки на самом деле. Это что-то большее, чем просто возможность отладки в браузере? К сожалению, поскольку я работаю над REST API, это мне не очень помогает.
Майкл Шепер,

Куда мне поместить этот фрагмент?
mLstudent33

1
@ mLstudent33 в оболочке
Эдуард Лопес,

16

Можно также использовать расширение Flask Debug Toolbar для получения более подробной информации, встроенной в отображаемые страницы.

from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension
import logging

app = Flask(__name__)
app.debug = True
app.secret_key = 'development key'

toolbar = DebugToolbarExtension(app)

@app.route('/')
def index():
    logging.warning("See this message in Flask Debug Toolbar!")
    return "<html><body></body></html>"

Запустите приложение следующим образом:

FLASK_APP=main.py FLASK_DEBUG=1 flask run

12

Если вы используете Visual Studio Code, замените

app.run(debug=True)

с участием

app.run()

Появляется при включении внутреннего отладчика отключает отладчик VS Code.


3
Можете поделиться примером рабочего сетапа? У меня уже есть FLASK_APP, определенный в моем env, и конфигурация по умолчанию не будет работать. Я пробовал вот это - pastebin.com/v8hBQ2vv и ряд подобных перестановок, но безрезультатно.
Брэндон Дьюб

12

Если вы хотите отлаживать приложение Flask, просто перейдите в папку, где находится приложение Flask. Не забудьте активировать виртуальную среду и вставить строки в консоли, изменив "mainfilename", на главный файл flask.

export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

После того, как вы включите отладчик для приложения Flask, почти каждая ошибка будет выводиться на консоль или в окно браузера. Если вы хотите выяснить, что происходит, вы можете использовать простые операторы печати или вы также можете использовать console.log () для кода javascript.


6

Установите python-dotenvв своей виртуальной среде.

Создайте .flaskenv в корне вашего проекта. Под корнем проекта я подразумеваю папку, в которой находится ваш файл app.py

Внутри этого файла напишите следующее:

FLASK_APP=myapp 
FLASK_ENV=development

Теперь выполните следующую команду:

flask run

Не работает для меня ... он продолжает показывать режим отладки: выключен
Федерико Джентиле

3

Для Включение режима отладки в колбе просто введите установить FLASK_DEBUG=1на свой контекстуальный CMDдля окон и экспорта FLASK_DEBUG=1на Linux termial затем перезапустить приложение , и вы хорошо идти !!


2

Подсказка - если вы используете PyCharm, перейдите к Edit Configurations=> Configurationsи установите FLASK_DEBUGфлажок, перезапустите Run.


2
Вы можете добавить, что этот флажок доступен только в PyCharm Professional. Ссылка: jetbrains.com/help/pycharm/…
cyroxx 09

1

Используйте регистраторы и операторы печати в среде разработки, вы можете быть на страже в случае производственных сред.


1

Для пользователей Windows:

Откройте Powershell и cd в каталог вашего проекта.

Используйте эти коммандос в Powershell, все остальное не будет работать в Powershell.

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"

-1

Если вы запускаете его локально и хотите иметь возможность пошагово выполнять код:

python -m pdb script.py


Это вообще не относится к
флеш-
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.