【发布时间】:2014-02-18 10:10:22
【问题描述】:
我目前正在使用 python/twisted 构建一个 http 服务器。
此服务器必须在另一个 Web 服务器上获取内容,将其存储在本地并将响应发送回客户端。如果遇到 404,它必须尝试提供本地文件,否则如果根本没有本地文件就会失败。
为了实现这一点,我使用了不同的请求。我的代码大致是这样的:
class RemoteFile(Resource):
isLeaf = True
def render_GET(self, request):
# Start downloading the corresponding file on the remote server
# Will call `self.serve_local_file` when done
return NOT_DONE_YET
def serve_local_file(self, request):
if self.file_exists_for_request(request):
fileResource = File(filename)
fileResource.render(request)
else:
page = NoResource("No such file")
html = page.render(request)
# The next two lines are my problem
request.write(html)
request.finish()
我必须添加最后两行(write() 和 finish())才能让请求真正完成。对于File 资源,我不需要这些行,因为它自己处理写入/完成,这与 NoResource 不同。
这本身不是问题,但事实证明这个page 变量不是硬编码的,它实际上是我的类上的fallback 属性,应该是Resource。这意味着我将来可以用默认的File 替换它。在这种情况下,我将不得不修改我的代码......
是我做错了什么,还是File和ErrorPage的接口不一致?
【问题讨论】:
-
请包含一个完整的、可运行的示例,这样我们就可以实际运行某些东西并查看行为是什么,而不是猜测。