カスタムエラーページ
Flaskには、HTTPエラーコードを使用してリクエストを早期に中止する便利なabort()
関数が付属しています。 また、基本的な説明が記載されたわかりやすい白黒のエラーページも表示されますが、特別なことは何もありません。
エラーコードに応じて、ユーザーが実際にそのようなエラーを目にする可能性は低くなります。
一般的なエラーコード
次のエラーコードは、アプリケーションが正しく動作している場合でも、ユーザーに表示されることが多いものです。
- 404お探しのページが見つかりませんでした
- 古き良き「チャップ、あなたはそのURLを入力するのを間違えました」というメッセージ。 インターネットの初心者でさえ、404が意味することを知っているほど一般的です:くそー、私が探していたものはそこにありません。 少なくともインデックスへのリンクなど、404ページに実際に役立つものがあることを確認することをお勧めします。
- 403禁止します
- Webサイトに何らかのアクセス制御がある場合は、許可されていないリソースの403コードを送信する必要があります。 したがって、ユーザーが禁止されたリソースにアクセスしようとしたときに、ユーザーが失われないようにしてください。
- 410ゴーン
- 「404NotFound」に「410Gone」という名前の兄弟がいることをご存知ですか? 実際にそれを実装する人はほとんどいませんが、以前に存在して削除されたリソースは、404ではなく410で答えるという考えです。 データベースからドキュメントを完全に削除するのではなく、単に削除済みとしてマークする場合は、ユーザーに好意を示し、代わりに410コードを使用して、探していたものが永久に削除されたことを示すメッセージを表示します。
- 500内部サーバーエラー
- 通常、プログラミングエラーが発生した場合、またはサーバーが過負荷の場合に発生します。 アプリケーションは遅かれ早かれ失敗するので、そこに素敵なページを用意するのは非常に良い考えです(アプリケーションエラーも参照)。
エラーハンドラ
エラーハンドラーは、エラーのタイプが発生したときに応答を返す関数です。これは、ビューが要求URLが一致したときに応答を返す関数であるのと同様です。 処理中のエラーのインスタンスが渡されます。これはおそらくHTTPException
です。 「500InternalServer Error」のエラーハンドラーには、明示的な500エラーに加えて、キャッチされない例外が渡されます。
エラーハンドラは、errorhandler()
デコレータまたはregister_error_handler()
メソッドに登録されます。 ハンドラーは、404などのステータスコードまたは例外クラスに登録できます。
応答のステータスコードはハンドラーのコードに設定されません。 ハンドラーから応答を返すときは、必ず適切なHTTPステータスコードを指定してください。
デバッグモードで実行している場合、「500 InternalServerError」のハンドラーは使用されません。 代わりに、対話型デバッガーが表示されます。
「404ページが見つかりません」例外の実装例を次に示します。
アプリケーションファクトリパターンを使用する場合:
テンプレートの例は次のとおりです。
APIエラーをJSONとして返す
Web APIにFlaskを使用する場合、上記と同じ手法を使用して、APIエラーにJSON応答を返すことができます。 abort()
は、description
パラメーターで呼び出されます。 errorhandler()
はそれをJSONエラーメッセージとして使用し、ステータスコードを404に設定します。