Як налагодити програму Flask

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

59
Немає нічого чарівного щодо app.run() (з налагодженням чи вимкненням). Фляга поводиться як будь-яке інше додаток python, так що ви можете налагодити його так само, як ви налагоджуєте будь-яке додаток Python. Якщо ви хочете використовувати ведення журналу, скористайтеся журналом. Якщо ви хочете друкувати, використовуйте відбитки. Ви навіть можете використовувати відладчик, якщо хочете.
додано Автор Mark Hildreth, джерело

7 Відповіді

Запуск додатка в режимі розробки покаже інтерактивний трасування та консоль у браузері, коли виникла помилка. Для запуску в режимі розробки встановіть змінну середовища 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 .

Якщо замість команди flask run використовується метод app.run() , передайте debug = True , щоб увімкнути режим налагодження.

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

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

Ви також можете використовувати pdb, pudb або інший налагоджувач терміналів, викликаючи set_trace у представленні, де ви хочете почати налагодження.


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

61
додано

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

13
додано
Насправді, коли ви запускаєте за допомогою debug = True , ви насправді використовуєте відладчик Werkzeug, так що це не є або-або ;-)
додано Автор Sean Vieira, джерело
Я встановив app.run (debug = True), якщо я роблю друк xyz, де він друкується, спасибі
додано Автор Kimmy, джерело
Ха, ти маєш рацію. Я думаю, я повинен був подивитися на setup.py Flask для вимог. Я використовую його модифіковану копію для роботи в GAE, де потрібно ініціалізувати Werkzeug вручну.
додано Автор bnlucas, джерело
Використання print 'xyz' буде надруковано на консолі. Якщо ви хочете налагодити в браузері, вам доведеться змусити помилку де ви хочете налагодити. raise Exception ('xyz') . Це призведе до виведення налагодження у вікно веб-переглядача.
додано Автор bnlucas, джерело

З документації 0.11 можна включити налагодження Режим експортування змінної середовища:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
7
додано
Цей відповідь буде більш корисним, якщо він пояснить, який режим налагодження насправді. Чи це більше, ніж дозволяє налагоджувати в браузері? На жаль, оскільки я працюю над API REST, це дуже не допомагає мені.
додано Автор Michael Scheper, джерело

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

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
5
додано
@AshwinYaprala import logging (з стандартної бібліотеки Python). Але це насправді не потрібно. Просто видаліть рядок logging ... .
додано Автор turdus-merula, джерело
Отримання наступної помилки. "NameError: ім'я журналу" не визначено "
додано Автор Ashwin Yaprala, джерело

Якщо ви використовуєте код Visual Studio, замініть

app.run(debug=True)

з

app.run()

Воно з'являється при включенні внутрішнього відладчика, відключає відладчик VS Code.

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

Якщо ви використовуєте його локально і хочете мати можливість пройти через код:

python-m pdb script.py

0
додано

Quick tip - if you use a PyCharm, go to 'Edit Configurations' => 'Configurations' and enable 'FLASK_DEBUG' checkbox, restart the 'Run'.

0
додано
ІТ КПІ - Python
ІТ КПІ - Python
625 учасників

Канал обговорень про всякі штуки зі світу пайтону. Прохання: 0. мати повагу одне до одного; 1. не матюкатися в сторону людей; 2. не захламляти тред повідомленнями по одному слову;