gpt4 book ai didi

python - 子类化 static.File

转载 作者:太空狗 更新时间:2023-10-30 01:16:38 24 4
gpt4 key购买 nike

我是 Twisted 的新手,我在为 twisted 中的 static.File 进行一些必要的子类化时遇到了麻烦。我正在尝试在子类中设置请求 header 。

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 /

除了 root 之外还有许多不同的路径。

最佳答案

您的代码中的问题出在 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 ,它使连接保持直到它没有明确关闭(在我们的例子中,文件下载后)。

关于python - 子类化 static.File,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11958272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com