HTTP例外—Werkzeugのドキュメント
HTTP例外
エラークラス
次のエラークラスがWerkzeugに存在します。
ベースクラス
すべての例外は、この共通のインターフェースを実装します。
特別なHTTP例外
Werkzeug 0.3以降、一部の組み込みクラスは、通常のpython例外のように見える例外(KeyError
など)を発生させますが、同時にBadRequest
HTTP例外です。 この決定は、クライアントが送信されたフォームデータを改ざんして、アプリケーションが適切に回復できず、400 BAD REQUEST
で中止する必要がある場合に、中止する一般的なパターンを単純化するために行われました。
アプリケーションがすべてのHTTP例外をキャッチし、それらに適切に反応すると仮定すると、ビュー関数は次のことを安全に実行でき、キーが存在するかどうかを確認する必要はありません。
def new_post(request):
post = Post(title=request.form['title'], body=request.form['body'])
post.save()
return redirect(post.url)
title または body がフォームにない場合、KeyError
のように動作するだけでなく、BadRequest
例外として動作する特別なキーエラーが発生します。
単純な中止
例外をインポートして名前などを検索せずに、エラーコードで例外を発生させると便利な場合があります。 この目的のために、abort()
機能があります。
カスタム例外でこの機能を使用する場合は、アボートクラスのインスタンスを作成できます。
カスタムエラー
上記のリストからわかるように、すべてのステータスコードがエラーとして利用できるわけではありません。 特に、エラーを表さないリダイレクトやその他の200以外のステータスコードが欠落しています。 リダイレクトの場合は、ユーティリティのredirect()
機能を使用できます。
自分でエラーを追加したい場合は、HTTPException
をサブクラス化できます。
from werkzeug.exceptions import HTTPException
class PaymentRequired(HTTPException):
code = 402
description = '<p>Payment required.</p>'
これは、独自の例外に必要な最小限のコードです。 エラーにロジックを追加する場合は、get_description()
、get_body()
、get_headers()
、およびget_response()
メソッドをオーバーライドできます。 いずれにせよ、例外モジュールのソースコードを確認する必要があります。
description
パラメーターを使用して、コンストラクターのデフォルトの説明をオーバーライドできます。
raise BadRequest(description='Request failed because X was not present')