web-dev-qa-db-ja.com

Flaskアプリをデバッグする方法

Flaskでエラーをデバッグする方法を教えてください。コンソールに印刷しますか?ページへのFlashメッセージ?または、何かがうまくいかないときに何が起こっているかを把握するための、より強力なオプションがありますか?

85
Kimmy

開発モードでアプリを実行すると、エラーが発生したときにブラウザーにインタラクティブなトレースバックとコンソールが表示されます。開発モードで実行するには、FLASK_ENV=development環境変数を設定してから、flask runコマンドを使用します(アプリケーションにもFLASK_APPを指定することを忘れないでください)。

Linux、Mac、Windows用Linuxサブシステム、Windows上のGit Bashなど:

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を渡してデバッグモードを有効にします。

開発モードに関係なく、サーバーを実行している端末にもトレースバックが出力されます。

PyCharm、VS Codeなどを使用している場合、そのデバッガーを利用して、ブレークポイントでコードをステップ実行できます。実行構成は、app.run(debug=True, use_reloader=False)を呼び出すスクリプトを指すか、venv/bin/flaskスクリプトを指すようにして、コマンドラインから使用するように使用できます。リローダを無効のままにしておくこともできますが、リロードするとデバッグコンテキストが強制終了され、再度ブレークポイントをキャッチする必要があります。

デバッグを開始するビューでset_traceを呼び出して、pdb、pudb、または別のターミナルデバッガーを使用することもできます。


ブロックを除き、あまりにも広範に使用しないでください。キャッチオールtry... except...ですべてのコードを囲むと、デバッグするエラーが沈黙します。 Flaskはデバッガーまたは500エラーを表示し、トレースバックをコンソールに出力することで既に例外を処理するため、通常は不要です。

90
davidism

以下に示すように、 Werkzeug Debuggereditapp.run(debug=True)を使用できます。

23
bnlucas

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
14
Édouard Lopez

Visual Studio Codeを使用している場合は、置き換えます

app.run(debug=True)

app.run()

内部デバッガーをオンにすると、VS Codeデバッガーが無効になります。

9
Eman4real

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
9
turdus-merula

Flakアプリをデバッグする場合は、flaskアプリがあるフォルダーに移動し、仮想環境をアクティブにし、コンソールの行を貼り付けて「mainfilename」をflaskメインファイルに変更することを忘れないでください。

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

flaskアプリのデバッガーを有効にすると、ほとんどすべてのエラーがコンソールまたはブラウザーウィンドウに出力されます。何がハッピングしているかを知りたい場合は、単純なprintステートメントを使用するか、javascriptコードにconsole.log()を使用することもできます。

4
omkar yadav

クイックヒント-PyCharmを使用する場合は、Edit Configurations => Configurationsに移動し、FLASK_DEBUGチェックボックスを有効にして、Runを再起動します。

0
Sgryt87

ローカルで実行していて、コードをステップ実行できるようにする場合:

python -m pdb script.py

0
rstackhouse

仮想環境にpython-dotenvをインストールします。

プロジェクトルートに.flaskenvを作成します。プロジェクトルートとは、app.pyファイルがあるフォルダーのことです。

このファイル内に以下を書きます:

FLASK_APP=myapp 
FLASK_ENV=development

次のコマンドを発行します。

flask run
0
Tony

開発環境でロガーと出力ステートメントを使用すると、実稼働環境の場合に歩sentを使用できます。

0
thisisayush