2013-06-26 4 views
42

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

+2

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

ответ

8

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

+6

На самом деле, когда вы работаете с 'debug = True', вы на самом деле используете Werkzeug debuger, так что это не либо - или ;-) –

+0

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

+0

Я установил app.run (debug = True), если я распечатаю xyz, где он печатает, спасибо – Kimmy

42

Запуск приложения в режиме отладки (app.debug = True или app.run(debug=True) или FLASK_DEBUG=1 flask run) отобразит интерактивную трассировку и консоль в браузере при возникновении ошибки.

Если вы используете PyCharm, вы можете воспользоваться его отладчиком, чтобы выполнить код с помощью контрольных точек. Просто убедитесь, что вы отключили отладчик Werkzeug и перезагрузили код. Конфигурация запуска должна указывать на скрипт, который запускает app.run(debug=True, use_debugger=False, use_reloader=False). Вы можете оставить use_reloader=True, но перезагрузка убьет контекст отладки, и вам придется снова поймать точку останова.

+4

Да. Но что, если вы не используете браузер, например? для API REST? –

+0

Как уже упоминалось во второй половине, используйте отладчик PyCharm (или другой отладчик). – davidism

+0

Спасибо, я посмотрю на PyCharm. Интерактивная оболочка Python всегда была достаточной для того, чтобы я не играл с IDE для Python, но, возможно, это катализатор. И тем не менее, кажется еще более естественным отлаживать оболочку - оболочку _real_, а не какую-либо притворную оболочку в браузере, насколько это возможно. Я чувствую, что мне так или иначе не хватает очевидного способа сделать это для приложений Flask. –

5

Из 0.11 documentation, вы можете включить режим отладки, экспортируя переменную окружения:

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

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

0

Если вы работаете локально и хотите, чтобы иметь возможность пройти через код:

python -m pdb script.py

5

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

from flask import Flask 
from flask_debugtoolbar import DebugToolbarExtension 

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 
+0

Получение следующей ошибки. «NameError: имя« logging »не определено» –

+1

@AshwinYaprala 'import logging' (из стандартной библиотеки Python). Но это не требуется. Просто удалите строку 'logging ... '. –