著者は、 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 Found
HTTPエラーで応答します。
開発サーバーが実行されている状態で、ブラウザーを使用して、以前に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
で応答します。
次に、カスタムエラーがどのように表示されるかを示すために、ファイルの最後に500
HTTPエラーで応答するルートを追加します。 このルートは、デバッガーが実行されているかどうかに関係なく、常に500 Internal Server Error
を提供します。
フラスコ_app/app.py
# ... @app.route('/500') def error500(): abort(500)
ここでは、ルート/500
を作成し、abort()
関数を使用して、500
HTTPエラーで応答します。
ファイルを保存して閉じます。
次に、新しい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トピックページをご覧ください。