猎鹰中间件异常期间的自定义响应
Custom response during falcon middleware exception
我正在为我的应用程序编写 Falcon
中间件。当我收到任何错误时,我想引发错误、中断进程和 return 我的自定义响应,看起来像:
{
"status": 503,
"message": "No Token found. Token is required."
}
但是标准 Falcon
错误实现不允许我为我的响应设置自定义字段。
如何最妥善地解决这个问题?
花了很多时间,我以如此有趣的方式解决了这个问题。我将我的代码放在 try/catch 块中,当发现错误时我决定不引发 Falcon
错误,并在设置响应状态和正文后尝试编写 return
关键字,因为该方法是 void
,所以它没有 return 任何东西。现在看起来像:
resp.status = falcon.HTTP_403
resp.body = body
return
我一直在寻找一个例子,这里是给仍然需要它的人的:
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)
在 falcon 文档中解释了创建自定义异常 class,搜索 add_error_handler
class RaiseUnauthorizedException(Exception):
def handle(ex, req, resp, params):
resp.status = falcon.HTTP_401
response = json.loads(json.dumps(ast.literal_eval(str(ex))))
resp.body = json.dumps(response)
将自定义异常 class 添加到 falcon API 对象
api = falcon.API()
api.add_error_handler(RaiseUnauthorizedException)
raise falcon.HTTPError(falcon.HTTP_503, 'No Token found. Token is required.')
我正在为我的应用程序编写 Falcon
中间件。当我收到任何错误时,我想引发错误、中断进程和 return 我的自定义响应,看起来像:
{
"status": 503,
"message": "No Token found. Token is required."
}
但是标准 Falcon
错误实现不允许我为我的响应设置自定义字段。
如何最妥善地解决这个问题?
花了很多时间,我以如此有趣的方式解决了这个问题。我将我的代码放在 try/catch 块中,当发现错误时我决定不引发 Falcon
错误,并在设置响应状态和正文后尝试编写 return
关键字,因为该方法是 void
,所以它没有 return 任何东西。现在看起来像:
resp.status = falcon.HTTP_403
resp.body = body
return
我一直在寻找一个例子,这里是给仍然需要它的人的:
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)
在 falcon 文档中解释了创建自定义异常 class,搜索 add_error_handler
class RaiseUnauthorizedException(Exception):
def handle(ex, req, resp, params):
resp.status = falcon.HTTP_401
response = json.loads(json.dumps(ast.literal_eval(str(ex))))
resp.body = json.dumps(response)
将自定义异常 class 添加到 falcon API 对象
api = falcon.API()
api.add_error_handler(RaiseUnauthorizedException)
raise falcon.HTTPError(falcon.HTTP_503, 'No Token found. Token is required.')