2016-12-12 2 views
5

私のアプリケーションにはFalconミドルウェアを書いています。私は、エラー、ブレイク工程を上げ、私のカスタム応答を返すようにしたいすべてのエラーを取得する場合、それは次のようになります。ファルコンミドルウェア例外時のカスタムレスポンス

{ 
    "status": 503, 
    "message": "No Token found. Token is required." 
} 

しかし、標準Falconエラーの実装では、私は私の応答にカスタムフィールドを設定することはできません。

この問題を最も適切に解決するにはどうすればよいですか?

答えて

4

多くの時間を費やした後、私はこのような面白い方法でこの問題を解決しました。私は自分のコードをtry/catchブロックに入れ、エラーがキャッチされたらFalconエラーを発生させないようにし、voidなので応答ステータスと本文を設定した後にreturnキーワードを書き込もうとしました。何でも私はまだ例を探していて、まだここにそれを必要とする方を対象としてた

resp.status = falcon.HTTP_403 
resp.body = body 

return 
2

from falcon.http_error import HTTPError 

class MyHTTPError(HTTPError): 

    """Represents a generic HTTP error. 
    """ 

    def __init__(self, status, error): 
     super(MyHTTPError, self).__init__(status) 
     self.status = status 
     self.error = error 

    def to_dict(self, obj_type=dict): 
     """Returns a basic dictionary representing the error. 
     """ 
     super(MyHTTPError, self).to_dict(obj_type) 
     obj = self.error 
     return obj 

使用:

error = {"error": [{"message": "Auth token required", "code": "INVALID_HEADER"}]} 

raise MyHTTPError(falcon.HTTP_400, error) 
を同様に今それが見えます
関連する問題