子类static.File(Subclassing static.File)

2019-09-21 04:59发布

我是新来的扭曲和我遇到的static.File在扭曲一些必要的子类的麻烦。 我试图子类中设置请求头。

class ResponseFile(static.File):

    def render_GET(self, request):
        request.setHeader('Content-Disposition', ['attachment ; filename="tick_db_export.csv"'])
        static.File.render_GET(self, request)

if __name__ == "__main__":
    from twisted.internet import reactor
    root = ResponseFile('WebFolder')
    testHandler = TestHandler()
    root.putChild('main', testHandler)
    reactor.listenTCP(3650, server.Site(root))
    reactor.run()

代码的第一位是子类定义本身(很简单),而第二位是从我的代码初始化部分(这不是我所有的代码)。 我也叫子类一个TestHandler对象resource.Resource。 WebFolder是包含许多静态文件的文件夹。

然而,使调用服务器时,我得到了大多数这些类型的异常的。

Unhandled Error
Traceback (most recent call last):
Failure: exceptions.RuntimeError: Producer was not unregistered for /

与根以外的许多不同的路径。

Answer 1:

在你的代码的问题是在render_GET方法。 它没有返回值。 基本上,它必须为同步响应,并返回字符串NOT_DONE_YET异步响应值。 在你的情况render_GET返回None (和您的连接得到立即关闭)。

所以,你必须使你的变化较小render_GET (加适量return ):

def render_GET(self, request):
    request.setHeader('Content-Disposition', ['attachment ; filename="tick_db_export.csv"'])
    return static.File.render_GET(self, request)

如果检查twisted.web.static.py模块,你会发现File.render_GET使得生产者和回报NOT_DONE_YET这使得连接坚持到它没有明确关闭(在我们的例子中,文件下载后)。



文章来源: Subclassing static.File