Twisted.web文件目录列出问题

时间:2013-12-06 21:04:47

标签: twisted.web

我正在尝试在网络应用中使用Twisted,而且我遇到了一个有趣的问题。我对Twisted很新,所以我不确定我是否在Twisted中看到了一个错误,或者我是不是正确使用它。

理论上,从示例中,File资源对象既可以用于提供目录中的文件,也可以提供目录列表。假设我在代码片段之前的其他位置定义了变量(port,reportsDir),我会执行以下操作:

rootResource = Resource()
rootResource.putChild("reports", File(reportsDir))
reactor.listenTCP(port, Site(rootResource))
reactor.run(installSignalHandlers=False)

现在,当我在我的主机上访问'/ reports'时,我在浏览器中收到一条消息“请求没有返回字节”,其中包含一些显然由扭曲产生的东西,但也包含一个u'的打印.....'字符串文字,实际上有目录列表。因此,DirectoryLister显然正在创建列表HTML,但它并没有被Twisted中的某些内容视为有效。它似乎不喜欢unicode字符串;这实际上是由Twisted自己制作的。

我是否需要设置其他配置项以使其将unicode字符串转换为必要的字节对象(或其他)或其他方法?

非常感谢,

-D

1 个答案:

答案 0 :(得分:4)

好吧,似乎问题是如果格式上的任何源字符串是unicode,Python会将任何字符串提升为unicode。在我的例子中,“reportsDir”是unicode,因为它来自XML文件,并将其设置为错误路径。

更改以上行:

rootResource.putChild("reports", File(reportsDir))

为:

rootResource.putChild("reports", File(reportsDir.encode('ascii', 'ignore')))

解决了这个问题。但是,我建议Twisted开发人员在File的构造函数中检查unicode,或者在DirectoryLister中检查unicode,如果是,则返回ascii编码版本。