我找到了以下Twisted请求处理程序的示例。我不清楚isLeaf
属性的用途。我为什么要在资源上设置它?
from twisted.internet import reactor
from twisted.web.server import Site
from twisted.web.resource import Resource
class RequestHandler(Resource):
isLeaf = True
def render_GET(self, request):
request.setResponseCode(200)
return "HelloWorld"
if __name__ == '__main__':
resource = RequestHandler()
factory = Site(resource)
reactor.listenTCP(8001, factory)
reactor.run()
答案 0 :(得分:3)
来自https://www.safaribooksonline.com/library/view/twisted-network-programming/9781449326104/ch04.html:
isLeaf实例变量描述资源是否具有子项。我们没有更多的工作......,只有叶子资源得到渲染
示例:
/index.html
是一个典型的叶子/users/
等端点,则/users/joe
不是
答案 1 :(得分:3)
请参阅twisted.web.resource.IResource.isLeaf文档 -
如果此IResource实现者是"叶子节点,则发出信号"或不。如果为True,则不会在此资源上调用getChildWithDefault。
Twisted找到要呈现的资源的方法是将路径拆分为段,然后调用" getChildWithDefault"在根上,然后根返回等等。如果它用完了段或者一个" leaf"它会停止。 (即,isLeaf = True)找到资源。
此时,它将调用资源上的render方法。在叶子资源中,渲染器通常需要查看" request.postpath"属性 - 存储有尚未用完查找资源的段列表。