Як налагодити додаток Flask


134

Як ви збираєтеся налагоджувати помилки в колбі? Друк на консоль? Flash повідомлення на сторінку? Або є більш потужний варіант, щоб зрозуміти, що відбувається, коли щось піде не так?


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, як згадувалося нижче, і я мав би знати.


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

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

Я встановив app.run (налагодження = 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
Ця відповідь була б кориснішою, якби вона пояснила, що насправді є налагодженим режимом. Це робить більше, ніж дозволяє налагодження в браузері? На жаль, оскільки я працюю над API REST, це не дуже допомагає мені.
Майкл Шепер

Куди я кладу цей фрагмент?
mLstudent33

1
@ mLstudent33 в оболонці
Едуард Лопес

15

Можна також скористатися розширенням Панель інструментів налагодження для налагодження, щоб отримати більш детальну інформацію, вкладену у візуалізовані сторінки.

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, замініть

app.run(debug=True)

з

app.run()

З'являється, коли ввімкнути внутрішній налагоджувач відключає відладчик коду VS.


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

12

Якщо ви хочете налагодити додаток у колбі, просто перейдіть до папки, де є додаток. Не забудьте активувати своє віртуальне середовище і вставити рядки в консолі, змінивши "головне ім'я", щоб передати основний файл.

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

Після ввімкнення програми налагодження програми для колби майже кожна помилка буде надрукована на консолі чи у вікні браузера. Якщо ви хочете з’ясувати, що відбувається, ви можете використовувати прості друковані висловлювання або також використовувати console.log () для коду javascript.


5

Встановіть python-dotenvу вашому віртуальному середовищі.

Створіть .flaskenv у корені проекту. Під коренем проекту я маю на увазі папку, у якій є ваш файл app.py

Всередині цього файлу напишіть наступне:

FLASK_APP=myapp 
FLASK_ENV=development

Тепер видайте таку команду:

flask run

Не працює для мене ... він продовжує показувати режим налагодження: вимкнено
Federico Gentile

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

1

Використовуючи реєстратори та друкуючі заяви в середовищі розробки, ви можете піти на відправлення у випадку виробничого середовища.


1

Для користувачів Windows:

Відкрийте Powershell та компакт-диск у своєму каталозі проектів.

Використовуйте ці командоси в 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.