我是 Twisted 的新手,我正在尝试编写一个简单的资源
显示数据库中的名称列表,这是我的代码的一部分:
#code from my ContactResource class
def render_GET(self, request):
def print_contacts(contacts, request):
for c in contacts:
request.write(c.name)
if not request.finished:
request.finish()
d = Contact.find() #Contact is a Twistar DBObject subclass
d.addCallback(print_contacts, request)
return NOT_DONE_YET
我的问题是:如何更改此方法以使用 inlineCallbacks 装饰器?
A render_GET
方法可能不会返回Deferred
。它可能只返回一个字符串或NOT_DONE_YET
。任何装饰有inlineCallbacks
将返回一个Deferred
。所以,你可以不装饰render_GET
with inlineCallbacks
.
当然,没有什么可以阻止您调用您想要的任何其他函数render_GET
,包括返回一个Deferred
。只需扔Deferred
离开而不是返回render_GET
(当然,请确保Deferred
永远不会因失败而触发,或者扔掉它你可能会错过一些错误报告......)。
因此,例如:
@inlineCallbacks
def _renderContacts(self, request):
contacts = yield Contact.find()
for c in contacts:
request.write(c.name)
if not request.finished:
request.finish()
def render_GET(self, request):
self._renderContacts(request)
return NOT_DONE_YET
我建议至少看一下txyoga and klein如果您打算使用 Twisted 进行任何严肃的 Web 开发。即使您不想使用它们,它们也应该为您提供一些关于如何构建代码并完成像这样的各种常见任务的好主意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)