如何创建我自己的 HTTP 200 结果 class?
How to create my own HTTP 200 result class?
在 CherryPy 中,当出现问题时我可以 raise cherrypy.HTTPError(code, message)
,或者当一切正常时我可以 return string
。
我现在正在寻找的是如何创建一个 class,以便我可以这样做:
class MyOwnResultClass:
foo = None
def __init__(self, foo):
self.foo = foo
def __str__(self):
return "Result: {f}".format(f=self.foo)
class cherrypystuff(object):
@cherrypy.expose
def index(self):
return MyOwnResultClass("f")
失败并出现错误
TypeError: iteration over non-sequence
而且我必须使用 return str(MyOwnResultClass("f")
。
尝试将您的 __str__ 方法重命名为 __repr__ ...我认为这应该适用于您的尝试。
这是我的想法。
from functools import wraps
import cherrypy
RESPONSE_TEMPLATE = 'Result: {res}'
def resultify(original_handler):
@wraps(original_handler)
def wrapped_handler(*args, **kwargs):
orig_resp = original_handler()
return RESPONSE_TEMPLATE.format(res=orig_resp)
return wrapped_handler
class CherryPyStuff(object):
@cherrypy.expose
@resultify
def index(self):
return 'f'
我更深入地研究了错误消息,显然,CherryPy 想要一个 return 类型的可迭代对象,如果不是字符串的话。
因此,解决方案非常简单:使 MyOwnResultClass
可迭代:
class MyOwnResultClass:
foo = None
def __init__(self, foo):
self.foo = foo
def __iter__(self):
yield "Result: {f}".format(f=self.foo)
更新 看到@webKnjaZ 建议的谈话后,我重构为:
def MyOwnResult(foo):
yield "Result: {f}".format(f=foo)
在 CherryPy 中,当出现问题时我可以 raise cherrypy.HTTPError(code, message)
,或者当一切正常时我可以 return string
。
我现在正在寻找的是如何创建一个 class,以便我可以这样做:
class MyOwnResultClass:
foo = None
def __init__(self, foo):
self.foo = foo
def __str__(self):
return "Result: {f}".format(f=self.foo)
class cherrypystuff(object):
@cherrypy.expose
def index(self):
return MyOwnResultClass("f")
失败并出现错误
TypeError: iteration over non-sequence
而且我必须使用 return str(MyOwnResultClass("f")
。
尝试将您的 __str__ 方法重命名为 __repr__ ...我认为这应该适用于您的尝试。
这是我的想法。
from functools import wraps
import cherrypy
RESPONSE_TEMPLATE = 'Result: {res}'
def resultify(original_handler):
@wraps(original_handler)
def wrapped_handler(*args, **kwargs):
orig_resp = original_handler()
return RESPONSE_TEMPLATE.format(res=orig_resp)
return wrapped_handler
class CherryPyStuff(object):
@cherrypy.expose
@resultify
def index(self):
return 'f'
我更深入地研究了错误消息,显然,CherryPy 想要一个 return 类型的可迭代对象,如果不是字符串的话。
因此,解决方案非常简单:使 MyOwnResultClass
可迭代:
class MyOwnResultClass:
foo = None
def __init__(self, foo):
self.foo = foo
def __iter__(self):
yield "Result: {f}".format(f=self.foo)
更新 看到@webKnjaZ 建议的谈话后,我重构为:
def MyOwnResult(foo):
yield "Result: {f}".format(f=foo)