gpt4 book ai didi

CherryPy HTTPError 自定义响应处理(*NOT* HTML)

转载 作者:行者123 更新时间:2023-12-04 13:47:35 28 4
gpt4 key购买 nike

我在为 cherrypy.HTTPError 提供自定义响应处理时遇到问题.我希望在响应正文中显示的唯一内容是 JSON 编码的 dict(这是 REST API)。源代码似乎表明HTTPError.set_response()可以用来修改cherrypy.response object ... 引用此方法中的注释:

修改cherrypy.response 状态、标题和正文以表示自我。 CherryPy 在内部使用它,但您也可以使用它来创建 HTTPError 对象并设置其输出,而不会*引发*异常。

我有子类 HTTPError 为响应提供我自己的主体。我调用基类方法以确保进行任何必要的内务处理。

class APIError(cherrypy.HTTPError):
def __init__(self, err_resp):
super().__init__(status=err_resp['error_code'])
self._api_err_resp = err_resp

def set_response(self):
super().set_response()
response = cherrypy.serving.response
response.body = json.dumps(self._api_err_resp).encode()

我现在可以拨打 APIError没有问题,但我遇到的问题是,一旦我的自定义错误出现,CherryPy Web 服务器需要大约 10-15 秒来响应我的客户端(如果我使用 HTTPError,我不会遇到任何延迟)。我已经跟踪了源代码,但找不到延迟的原因。

任何帮助,将不胜感激。

最佳答案

在 Python 3.7.2、64 位、windows7 上使用cherrypy 16.0.2
子类化 HTTPError 不会导致异常等待时间。
也许您应该尝试使用当前版本的cherrypy。

这是我用来测试它的代码:

import cherrypy as cp 

class APIError(cp.HTTPError):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self._json_error = kwargs

def set_response(self):
super().set_response()
response = cp.serving.response
response.body = json.dumps({'error': self._json_error}).encode('utf-8')

此示例要求您使用正确的关键字 status 和 message 调用 APIError。对于生产使用,我编写了一个更大的类,我在其中传递状态、json 数据和其他用于日志记录的数据,然后调用 super().__init__只有状态码。

关于CherryPy HTTPError 自定义响应处理(*NOT* HTML),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42816264/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com