加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 对static.File进行子类化

发布时间:2020-12-16 22:00:51 所属栏目:Python 来源:网络整理
导读:我是Twisted的新手,我遇到了一些必要的子类,因为static.File是扭曲的.我正在尝试在子类中设置请求标头. class ResponseFile(static.File): def render_GET(self,request): request.setHeader('Content-Disposition',['attachment ; filename="tick_db_export

我是Twisted的新手,我遇到了一些必要的子类,因为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()

代码的第一位是子类定义本身(非常简单),而第二位是我的代码的初始化部分(这不是我的所有代码).我还有一个resource.Resource对象的子类,名为TestHandler. 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中进行较小的更改(添加正确的返回值):

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,这使得连接保持不变直到它没有显式关闭(在我们的例子中,在下载文件之后).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读