HTTP例外—Werkzeugのドキュメント

提供:Dev Guides
Werkzeug/docs/2.0.x/exceptions
移動先:案内検索

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')