Twisted的isLeaf属性的目的是什么?

时间:2017-03-14 10:32:22

标签: python twisted twisted.internet

我找到了以下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()

2 个答案:

答案 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"属性 - 存储有尚未用完查找资源的段列表。