我目前正在构建一个带有python/ with的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的接口不一致?
发布于 2014-02-19 04:08:38
你的问题本身有一个提示:
return NOT_DONE_YET这是IResource信号的一部分,它是否返回调用方必须在显式“完成”请求之前写入请求的字符串,或者IResource是否负责执行这些任务。
检查您正在调用render的任何内容的返回值,然后相应地执行操作。
https://stackoverflow.com/questions/21850401
复制相似问题