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

What is the purpose of Twisted's isLeaf attribute?

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

来自 https://www.safaribooksonline.com/library/view/twisted-network-programming/9781449326104/ch04.html :

The isLeaf instance variable describes whether or not a resource will have children. Without more work on our part..., only leaf resources get rendered

示例:

  • /index.html是典型的叶子
  • /users/ 如果有像 /users/joe
  • 这样的端点则不是

请参阅 twisted.web.resource.IResource.isLeaf 文档 --

Signal if this IResource implementor is a "leaf node" or not. If True, getChildWithDefault will not be called on this Resource.

Twisted 找到要呈现的资源的方式是将路径分成多个段,然后在根上调用 "getChildWithDefault",然后调用根 returns 等等。如果它用完段或找到 "leaf"(即 isLeaf=True)资源,它就会停止。

此时,它将调用资源上的渲染方法。在叶资源中,渲染器通常会希望查看 "request.postpath" 属性——其中存储了尚未用完的段列表以查找资源。