Flaskアプリケーションでエラーを処理する方法
著者は、 Write for DOnations プログラムの一環として、 Free and Open SourceFundを選択して寄付を受け取りました。
序章
Flask は、Python言語でWebアプリケーションを作成するための便利なツールと機能を提供する軽量のPythonWebフレームワークです。
Webアプリケーションを開発しているとき、必然的に、アプリケーションが予想とは逆の動作をする状況に遭遇します。 変数のスペルを間違えたり、forループを誤用したり、宣言する前に関数を呼び出したり、単に次のようなページを探したりするなど、Python例外を発生させる方法でifステートメントを作成する可能性があります。存在しません。 エラーと例外を適切に処理する方法を学ぶと、Flaskアプリケーションの開発がより簡単かつスムーズになります。
このチュートリアルでは、Webアプリケーションの開発時に発生する一般的なエラーを処理する方法を示す小さなWebアプリケーションを作成します。 カスタムエラーページを作成し、Flaskデバッガーを使用して例外のトラブルシューティングを行い、ログを使用してアプリケーションのイベントを追跡します。
前提条件
- ローカルのPython3プログラミング環境。 Python3シリーズのローカルプログラミング環境をインストールおよびセットアップする方法」シリーズのディストリビューションのチュートリアルに従うことができます。 このチュートリアルでは、プロジェクトディレクトリを
flask_appと呼びます。 - ルート、ビュー関数、テンプレートなどの基本的なFlaskの概念の理解。 Flaskに慣れていない場合は、FlaskとPythonを使用して最初のWebアプリケーションを作成する方法およびFlaskアプリケーションでテンプレートを使用する方法を確認してください。
- 基本的なHTMLの概念の理解。 背景知識については、HTMLを使用してWebサイトを構築する方法チュートリアルシリーズを確認できます。
ステップ1—フラスコデバッガーの使用
このステップでは、いくつかのエラーがあるアプリケーションを作成し、デバッグモードなしで実行して、アプリケーションがどのように応答するかを確認します。 次に、デバッグモードをオンにして実行し、デバッガーを使用してアプリケーションエラーのトラブルシューティングを行います。
プログラミング環境をアクティブにしてFlaskをインストールしたら、flask_appディレクトリ内で編集するためにapp.pyというファイルを開きます。
nano app.py
app.pyファイル内に次のコードを追加します。
フラスコ_app/app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
上記のコードでは、最初にFlaskクラスをflaskパッケージからインポートします。 次に、appというFlaskアプリケーションインスタンスを作成します。 @app.route()デコレータを使用して、index()というビュー関数を作成します。この関数は、render_template()関数を戻り値として呼び出し、index.htmlというテンプレートをレンダリングします。 ]。 このコードには2つのエラーがあります。1つはrender_template()関数をインポートしなかったこと、もう1つはindex.htmlテンプレートファイルが存在しないことです。
ファイルを保存して閉じます。
次に、次のコマンドを使用してFLASK_APP環境変数を使用してアプリケーションについてFlaskに通知します(Windowsでは、exportの代わりにsetを使用します)。
export FLASK_APP=app
次に、flask runコマンドを使用してアプリケーションサーバーを実行します。
flask run
ターミナルに次の情報が表示されます。
Output * Serving Flask app 'app' (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
この出力は、次の情報を提供します。
- 提供されているFlaskアプリケーション(この場合は
app.py) - ここでは
productionの環境です。 警告メッセージは、このサーバーが実稼働環境用ではないことを強調しています。 このサーバーを開発に使用しているため、この警告は無視してかまいませんが、詳細については、Flaskドキュメントの展開オプションページを参照してください。 このFlaskデプロイメントチュートリアルをGunicornで、またはこれをuWSGI でチェックすることもできます。または、DigitalOcean App Platformを使用して、HowToに従ってFlaskアプリケーションをデプロイすることもできます。 Gunicornを使用してFlaskアプリをAppPlatformチュートリアルにデプロイします。 - デバッグモードがオフになっているため、Flaskデバッガーが実行されておらず、アプリケーションで役立つエラーメッセージが表示されません。 本番環境では、詳細なエラーを表示すると、アプリケーションがセキュリティの脆弱性にさらされます。
- サーバーは
http://127.0.0.1:5000/URLで実行されています。 サーバーを停止するには、CTRL+Cを使用しますが、まだ実行しないでください。
次に、ブラウザを使用してインデックスページにアクセスします。
http://127.0.0.1:5000/
次のようなメッセージが表示されます。
OutputInternal Server Error The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
これは500内部サーバーエラーであり、サーバーがアプリケーションコードで内部エラーを検出したことを示すサーバーエラー応答です。
ターミナルに、次の出力が表示されます。
Output[2021-09-12 15:16:56,441] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "/home/abd/.local/lib/python3.9/site-packages/flask/app.py", line 2070, in wsgi_app
response = self.full_dispatch_request()
File "/home/abd/.local/lib/python3.9/site-packages/flask/app.py", line 1515, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/abd/.local/lib/python3.9/site-packages/flask/app.py", line 1513, in full_dispatch_request
rv = self.dispatch_request()
File "/home/abd/.local/lib/python3.9/site-packages/flask/app.py", line 1499, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/home/abd/python/flask/series03/flask_app/app.py", line 8, in index
return render_template('index.html')
NameError: name 'render_template' is not defined
127.0.0.1 - - [12/Sep/2021 15:16:56] "GET / HTTP/1.1" 500 -
上記のトレースバックは、内部サーバーエラーをトリガーしたコードを通過します。 行NameError: name 'render_template' is not definedは、問題の根本的な原因を示しています。render_template()関数がインポートされていません。
ここに表示されているように、エラーのトラブルシューティングを行うためにターミナルに移動する必要がありますが、これは便利ではありません。
開発サーバーでデバッグモードを有効にすることで、トラブルシューティングをより適切に行うことができます。 これを行うには、CTRL+Cでサーバーを停止し、環境変数FLASK_ENVをdevelopmentに設定して、アプリケーションを開発モード(デバッガーを有効にする)で実行できるようにします。次のコマンド(Windowsでは、exportの代わりにsetを使用します):
export FLASK_ENV=development
開発サーバーを実行します。
flask run
ターミナルに次のような出力が表示されます。
Output * Serving Flask app 'app' (lazy loading) * Environment: development * Debug mode: on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 120-484-907
ここでは、環境がdevelopmentになり、デバッグモードがオンになり、デバッガーがアクティブになっていることがわかります。 Debugger PINは、ブラウザでコンソールのロックを解除するために必要なPINです(下の画像で囲まれた小さな端末アイコンをクリックするとアクセスできるインタラクティブなPythonシェル)。
ブラウザのインデックスページを更新すると、次のページが表示されます。
ここでは、わかりやすい方法でエラーメッセージが表示されています。 最初の見出しは、問題の原因となったPython例外の名前(この場合は NameError )を示しています。 2行目は、直接的な理由を示しています(render_template()は定義されていません。つまり、この場合はインポートされません)。 その後、実行された内部フラスココードをトレースバックします。 トレースバックの最後の行には通常最も有用な情報があるため、トレースバックを下から上に読んでください。
注:丸で囲まれた端末アイコンを使用すると、ブラウザーでさまざまなフレームでPythonコードを実行できます。 これは、Pythonインタラクティブシェルで行うのと同じ方法で変数の値をチェックする場合に役立ちます。 ターミナルアイコンをクリックするときは、サーバーの実行時に取得したデバッガーのPINコードを入力する必要があります。 このチュートリアルでは、このインタラクティブシェルは必要ありません。
このNameErrorの問題を修正するには、サーバーを実行したままにして、新しいターミナルウィンドウを開き、環境をアクティブにして、app.pyファイルを開きます。
nano app.py
次のようにファイルを変更します。
フラスコ_app/app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
ファイルを保存して閉じます。
ここでは、欠落していたrender_template()関数をインポートしました。
開発サーバーが実行されている状態で、ブラウザーのインデックスページを更新します。
今回は、次のような情報を含むエラーページが表示されます。
Outputjinja2.exceptions.TemplateNotFound jinja2.exceptions.TemplateNotFound: index.html
このエラーメッセージは、index.htmlテンプレートが存在しないことを示しています。
これを修正するには、コードの繰り返しを避けるために他のテンプレートが継承するbase.htmlテンプレートファイルを作成してから、ベーステンプレートを拡張するindex.htmlテンプレートを作成します。
templatesディレクトリを作成します。これは、Flaskがテンプレートファイルを探すディレクトリです。 次に、お気に入りのエディターを使用してbase.htmlファイルを開きます。
mkdir templates nano templates/base.html
base.htmlファイルに次のコードを追加します。
フラスコ_app/templates / base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %} {% endblock %} - FlaskApp</title>
<style>
nav a {
color: #d64161;
font-size: 3em;
margin-left: 50px;
text-decoration: none;
}
</style>
</head>
<body>
<nav>
<a href="{{ url_for('index') }}">FlaskApp</a>
<a href="#">About</a>
</nav>
<hr>
<div class="content">
{% block content %} {% endblock %}
</div>
</body>
</html>
ファイルを保存して閉じます。
この基本テンプレートには、他のテンプレートで再利用する必要があるすべてのHTMLボイラープレートが含まれています。 titleブロックは各ページのタイトルを設定するために置き換えられ、contentブロックは各ページのコンテンツに置き換えられます。 ナビゲーションバーには2つのリンクがあります。1つはurl_for()ヘルパー機能を使用してindex()ビュー機能にリンクするインデックスページ用で、もう1つは[バージョン情報]ページ用です。アプリケーションで。
次に、ベーステンプレートから継承するindex.htmlというテンプレートファイルを開きます。
nano templates/index.html
次のコードを追加します。
フラスコ_app/templates / index.html
{% extends 'base.html' %}
{% block content %}
<h1>{% block title %} Index {% endblock %}</h1>
<h2>Welcome to FlaskApp!</h2>
{% endblock %}
ファイルを保存して閉じます。
上記のコードでは、ベーステンプレートを拡張し、contentブロックをオーバーライドします。 次に、ページタイトルを設定し、titleブロックを使用してH1ヘッダーに表示し、H2ヘッダーに挨拶を表示します。
開発サーバーが実行されている状態で、ブラウザーのインデックスページを更新します。
アプリケーションにエラーが表示されなくなり、インデックスページが期待どおりに表示されることがわかります。
これで、デバッグモードを使用して、エラーメッセージを処理する方法を確認しました。 次に、選択したエラーメッセージで応答するリクエストを中止し、カスタムエラーページで応答する方法を確認します。
ステップ2—カスタムエラーページを作成する
このステップでは、リクエストを中止し、ユーザーがサーバーに存在しないデータをリクエストした場合に404HTTPエラーメッセージで応答する方法を学習します。 また、404 Not Foundエラーや500 Internal Server Errorエラーなどの一般的なHTTPエラーのカスタムエラーページを作成する方法についても学習します。
リクエストを中止してカスタム404HTTPエラーページで応答する方法を示すために、いくつかのメッセージを表示するページを作成します。 要求されたメッセージが存在しない場合は、404エラーで応答します。
まず、app.pyファイルを開いて、メッセージページの新しいルートを追加します。
nano app.py
ファイルの最後に次のルートを追加します。
フラスコ_app/app.py
# ...
@app.route('/messages/<int:idx>')
def message(idx):
messages = ['Message Zero', 'Message One', 'Message Two']
return render_template('message.html', message=messages[idx])
ファイルを保存して閉じます。
上記のルートには、URL変数idxがあります。 これは、表示されるメッセージを決定するインデックスです。 たとえば、URLが/messages/0の場合、最初のメッセージ(Message Zero)が表示されます。 URL変数にはデフォルトで文字列値があるため、intコンバーターを使用して正の整数のみを受け入れます。
message()ビュー関数内には、3つのメッセージを含むmessagesという通常のPythonリストがあります。 (実際のシナリオでは、これらのメッセージはデータベース、API、または別の外部データソースから送信されます。)この関数は、render_template()関数への呼び出しを2つの引数message.htmlで返します。テンプレートファイルとして、およびテンプレートに渡されるmessage変数として。 この変数には、URLのidx変数の値に応じて、messagesリストのリスト項目が含まれます。
次に、新しいmessage.htmlテンプレートファイルを開きます。
nano templates/message.html
次のコードを追加します。
フラスコ_app/templates / message.html
{% extends 'base.html' %}
{% block content %}
<h1>{% block title %} Messages {% endblock %}</h1>
<h2>{{ message }}</h2>
{% endblock %}
ファイルを保存して閉じます。
上記のコードでは、ベーステンプレートを拡張し、contentブロックをオーバーライドします。 H1見出しにタイトル(Messages)を追加し、H2見出しにmessage変数の値を表示します。
開発サーバーが実行されている状態で、ブラウザーで次のURLにアクセスします。
http://127.0.0.1:5000/messages/0 http://127.0.0.1:5000/messages/1 http://127.0.0.1:5000/messages/2 http://127.0.0.1:5000/messages/3
H2には、最初の3つのURLのそれぞれにそれぞれMessage Zero、Message One、またはMessage Twoというテキストが含まれていることがわかります。 ただし、4番目のURLでは、サーバーはIndexError: list index out of rangeエラーメッセージで応答します。 実稼働環境では、応答は500 Internal Server Errorでしたが、ここでの適切な応答は404 Not Foundであり、サーバーが3。
Flaskのabort()ヘルパー関数を使用して、404エラーで応答できます。 これを行うには、app.pyファイルを開きます。
nano app.py
最初の行を編集して、abort()関数をインポートします。 次に、message() を追加して機能を表示する試す ... 節を除く以下の強調表示された部分に示されているように:
フラスコ_app/app.py
from flask import Flask, render_template, abort
# ...
# ...
@app.route('/messages/<int:idx>')
def message(idx):
messages = ['Message Zero', 'Message One', 'Message Two']
try:
return render_template('message.html', message=messages[idx])
except IndexError:
abort(404)
ファイルを保存して閉じます。
上記のコードでは、 abort()関数をインポートします。この関数を使用して、リクエストを中止し、エラーで応答します。 message()ビュー関数では、try ... except句を使用して関数をラップします。 最初に、URLのインデックスに対応するメッセージを含むmessagesテンプレートを返そうとします。 インデックスに対応するメッセージがない場合、IndexError例外が発生します。 次に、except句を使用してそのエラーをキャッチし、abort(404)を使用して要求を中止し、404 Not FoundHTTPエラーで応答します。
開発サーバーが実行されている状態で、ブラウザーを使用して、以前にIndexErrorで応答したURLに再度アクセスします(または、インデックスが2より大きい任意のURLにアクセスします)。
http://127.0.0.1:5000/messages/3
次の応答が表示されます。
Not Found The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
これで、サーバーが要求されたメッセージを見つけることができなかったことを示す、より適切なエラーメッセージが表示されます。
次に、404エラーページ用のテンプレートと500エラーページ用のテンプレートを作成します。
まず、404エラーのハンドラーとして、特別な@app.errorhandler()デコレーターに関数を登録します。 app.pyファイルを開いて編集します。
nano app.py
次のように強調表示された部分を追加して、ファイルを編集します。
フラスコ_app/app.py
from flask import Flask, render_template, abort
app = Flask(__name__)
@app.errorhandler(404)
def page_not_found(error):
return render_template('404.html'), 404
@app.route('/')
def index():
return render_template('index.html')
@app.route('/messages/<int:idx>')
def message(idx):
messages = ['Message Zero', 'Message One', 'Message Two']
try:
return render_template('message.html', message=messages[idx])
except IndexError:
abort(404)
ファイルを保存して閉じます。
ここでは、@app.errorhandler()デコレータを使用して、関数page_not_found()をカスタムエラーハンドラとして登録します。 この関数はエラーを引数として受け取り、404.htmlというテンプレートを使用してrender_template()関数の呼び出しを返します。 このテンプレートは後で作成します。必要に応じて別の名前を使用できます。 また、render_template()呼び出しの後に、整数404を返します。 これは、応答のステータスコードが404であることをFlaskに通知します。 追加しない場合、デフォルトのステータスコード応答は 200 になります。これは、リクエストが成功したことを意味します。
次に、新しい404.htmlテンプレートを開きます。
nano templates/404.html
次のコードを追加します。
フラスコ_app/templates / 404.html
{% extends 'base.html' %}
{% block content %}
<h1>{% block title %} 404 Not Found. {% endblock %}</h1>
<p>OOPS! Sammy couldn't find your page; looks like it doesn't exist.</p>
<p>If you entered the URL manually, please check your spelling and try again.</p>
{% endblock %}
ファイルを保存して閉じます。
他のテンプレートと同様に、基本テンプレートを拡張し、contentおよびtitleブロックのコンテンツを置き換え、独自のHTMLコードを追加します。 ここには、タイトルとして<h1>の見出し、ページが見つからなかったことをユーザーに通知するカスタムエラーメッセージを含む<p>タグ、およびURLを手動で入力した可能性のあるユーザーに役立つメッセージがあります。 。
他のテンプレートと同じように、エラーページで必要なHTML、CSS、およびJavaScriptを使用できます。
開発サーバーが実行されている状態で、ブラウザーを使用して次のURLに再度アクセスします。
http://127.0.0.1:5000/messages/3
このページには、ベーステンプレートにあるナビゲーションバーとカスタムエラーメッセージが表示されます。
同様に、500 Internal Server Errorエラーのカスタムエラーページを追加できます。 app.pyファイルを開きます。
nano app.py
404エラーハンドラの下に次のエラーハンドラを追加します。
フラスコ_app/app.py
# ...
@app.errorhandler(404)
def page_not_found(error):
return render_template('404.html'), 404
@app.errorhandler(500)
def internal_error(error):
return render_template('500.html'), 500
# ...
ここでは、404エラーハンドラーで使用したのと同じパターンを使用します。 app.errorhandler()デコレータと500引数を使用して、internal_error()という関数をエラーハンドラにします。 500.htmlというテンプレートをレンダリングし、ステータスコード500で応答します。
次に、カスタムエラーがどのように表示されるかを示すために、ファイルの最後に500HTTPエラーで応答するルートを追加します。 このルートは、デバッガーが実行されているかどうかに関係なく、常に500 Internal Server Errorを提供します。
フラスコ_app/app.py
# ...
@app.route('/500')
def error500():
abort(500)
ここでは、ルート/500を作成し、abort()関数を使用して、500HTTPエラーで応答します。
ファイルを保存して閉じます。
次に、新しい500.htmlテンプレートを開きます。
nano templates/500.html
次のコードを追加します。
フラスコ_app/templates / 500.html
{% extends 'base.html' %}
{% block content %}
<h1>{% block title %} 500 Internal Server Error {% endblock %}</h1>
<p>OOOOPS! Something went wrong on the server.</p>
<p>Sammy is currently working on this issue. Please try again later.</p>
{% endblock %}
ファイルを保存して閉じます。
ここでは、404.htmlテンプレートで行ったのと同じことを行います。 基本テンプレートを拡張し、コンテンツブロックをタイトルと内部サーバーエラーについてユーザーに通知する2つのカスタムメッセージに置き換えます。
開発サーバーが実行されている状態で、500エラーで応答するルートにアクセスします。
http://127.0.0.1:5000/500
一般的なエラーページの代わりにカスタムページが表示されます。
これで、FlaskアプリケーションでHTTPエラーのカスタムエラーページを使用する方法がわかりました。 次に、ロギングを使用してアプリケーションのイベントを追跡する方法を学習します。 イベントの追跡は、コードの動作を理解するのに役立ち、開発とトラブルシューティングに役立ちます。
ステップ3—ロギングを使用してアプリケーションのイベントを追跡する
このステップでは、ロギングを使用して、サーバーが実行され、アプリケーションが使用されているときに発生するイベントを追跡します。これにより、アプリケーションコードで何が起こっているかを確認できるため、エラーのトラブルシューティングを簡単に行うことができます。
開発サーバーが実行されているときはいつでも、ログをすでに確認しています。これは通常、次のようになります。
127.0.0.1 - - [21/Sep/2021 14:36:45] "GET /messages/1 HTTP/1.1" 200 - 127.0.0.1 - - [21/Sep/2021 14:36:52] "GET /messages/2 HTTP/1.1" 200 - 127.0.0.1 - - [21/Sep/2021 14:36:54] "GET /messages/3 HTTP/1.1" 404 -
これらのログには、次の情報が表示されます。
127.0.0.1:サーバーが実行されていたホスト。[21/Sep/2021 14:36:45]:リクエストの日時。GET:HTTPリクエストメソッド。 この場合、GETを使用してデータを取得します。/messages/2:ユーザーが要求したパス。HTTP/1.1:HTTPバージョン。200または404:応答のステータスコード。
これらのログは、アプリケーションで発生する問題を診断するのに役立ちます。 Flaskが提供するロガーapp.loggerを使用して、特定のリクエストに関する詳細を知りたい場合は、より多くの情報をログに記録できます。
ロギングを使用すると、さまざまな機能を使用して、さまざまなロギングレベルに関する情報をレポートできます。 各レベルは、ある程度の重大度で発生したイベントを示します。 次の機能を使用できます。
app.logger.debug():イベントの詳細について。app.logger.info():正常に動作していることを確認します。app.logger.warning():予期しないことが発生したことを示します(「ディスク容量が不足しています」など)が、アプリケーションは期待どおりに動作しています。app.logger.error():アプリケーションの一部でエラーが発生しました。app.logger.critical():重大なエラー。 アプリケーション全体が機能しなくなる可能性があります。
Flaskロガーの使用方法を示すために、app.pyファイルを開いて編集し、いくつかのイベントをログに記録します。
nano app.py
message()ビュー関数を編集して、次のようにします。
フラスコ_app/app.py
# ...
@app.route('/messages/<int:idx>')
def message(idx):
app.logger.info('Building the messages list...')
messages = ['Message Zero', 'Message One', 'Message Two']
try:
app.logger.debug('Get message with index: {}'.format(idx))
return render_template('message.html', message=messages[idx])
except IndexError:
app.logger.error('Index {} is causing an IndexError'.format(idx))
abort(404)
# ...
ファイルを保存して閉じます。
ここでは、さまざまなレベルでいくつかのイベントをログに記録しました。 app.logger.info()を使用して、期待どおりに機能しているイベント(INFOレベル)をログに記録します。 詳細情報(DEBUGレベル)にはapp.logger.debug()を使用し、アプリケーションが特定のインデックスを持つメッセージを受信していることを示します。 次に、app.logger.error()を使用して、問題の原因となった特定のインデックス(ERRORレベル、エラーが発生したため)でIndexError例外が発生したという事実をログに記録します。
次のURLにアクセスしてください。
http://127.0.0.1:5000/messages/1
サーバーが実行されているターミナルに次の情報が表示されます。
Output [2021-09-21 15:17:02,625] INFO in app: Building the messages list... [2021-09-21 15:17:02,626] DEBUG in app: Get message with index: 1 127.0.0.1 - - [21/Sep/2021 15:17:02] "GET /messages/1 HTTP/1.1" 200 -
ここでは、INFOメッセージapp.logger.info()ログと、app.logger.debug()を使用してログに記録したインデックス番号のDEBUGメッセージが表示されます。
次に、存在しないメッセージのURLにアクセスします。
http://127.0.0.1:5000/messages/3
ターミナルに次の情報が表示されます。
Output[2021-09-21 15:33:43,899] INFO in app: Building the messages list... [2021-09-21 15:33:43,899] DEBUG in app: Get message with index: 3 [2021-09-21 15:33:43,900] ERROR in app: Index 3 is causing an IndexError 127.0.0.1 - - [21/Sep/2021 15:33:43] "GET /messages/3 HTTP/1.1" 404 -
ご覧のとおり、以前に表示したINFOおよびDEBUGログと、3のインデックスを持つメッセージのための新しいERRORログがあります。 ] 存在しない。
イベント、詳細情報、およびエラーをログに記録すると、問題が発生した場所を特定し、トラブルシューティングを容易にすることができます。
このステップでは、Flaskロガーの使用方法を学習しました。 ロギングの理解を深めるには、 Python3でロギングを使用する方法を確認してください。 ロギングの詳細については、Flaskロギングドキュメントおよびロギングに関するPythonドキュメントを参照してください。
結論
これで、Flaskでデバッグモードを使用する方法と、FlaskWebアプリケーションの開発時に発生する可能性のあるいくつかの一般的なエラーをトラブルシューティングして修正する方法を理解できました。 また、一般的なHTTPエラーのカスタムエラーページを作成し、Flaskロガーを使用してアプリケーションのイベントを追跡し、アプリケーションの動作を検査および把握できるようにしました。
Flaskの詳細については、Flaskトピックページをご覧ください。