【问题标题】:What is the purpose of Twisted's isLeaf attribute?Twisted 的 isLeaf 属性的用途是什么?
【发布时间】:2017-08-04 15:27:52
【问题描述】:

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

【问题讨论】:

    标签: python twisted twisted.internet


    【解决方案1】:

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

    isLeaf 实例变量描述资源是否有子资源。如果我们没有更多的工作......,只会渲染叶子资源

    例子:

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

    【讨论】:

    • 这是一个相当完整的答案。 isLeaf 真的和上面说的一样简单。这只是意味着“isLeaf”资源不再有分支资源。所以基本上如果你不打算从特定资源渲染其他资源,那么设置isLeaf 来表示。
    【解决方案2】:

    twisted.web.resource.IResource.isLeaf文档——

    此 IResource 实现者是否为“叶节点”的信号。如果为 True,则不会在此资源上调用 getChildWithDefault。

    Twisted 找到要渲染的资源的方式是将路径分割成段,然后在根上调用“getChildWithDefault”,然后无论根返回什么,等等。如果段用完,或者找到“叶子”(即 isLeaf=True)资源,它就会停止。

    此时,它将调用资源的渲染方法。在叶子资源中,渲染器通常会想要查看“request.postpath”属性——其中隐藏了尚未用完的段列表以查找资源。

    【讨论】:

      猜你喜欢
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      相关资源
      最近更新 更多