Python 扭曲、延迟的请求和文件与错误页面
我目前正在用python/twisted构建一个http服务器 此服务器必须在另一个web服务器上获取内容,将其存储在本地并将响应发送回客户端。如果遇到404,它必须尝试提供本地文件,否则如果根本没有本地文件,它将失败 为了实现这一点,我使用了不同的请求。我的代码大致如下所示:Python 扭曲、延迟的请求和文件与错误页面,python,twisted,deferred,Python,Twisted,Deferred,我目前正在用python/twisted构建一个http服务器 此服务器必须在另一个web服务器上获取内容,将其存储在本地并将响应发送回客户端。如果遇到404,它必须尝试提供本地文件,否则如果根本没有本地文件,它将失败 为了实现这一点,我使用了不同的请求。我的代码大致如下所示: class RemoteFile(Resource): isLeaf = True def render_GET(self, request): # Start downloading
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()
)才能让请求真正完成。对于文件
资源,我不需要这些行,因为与NoResource不同,它自己处理写入/完成
这本身不是问题,但事实证明,这个页面
变量不是硬编码的,它实际上是我的类上的回退
属性,应该是资源
。这意味着我将来可能想用默认的文件替换它。在这种情况下,我将不得不修改我的代码
我是否做错了什么,或者这是文件
和错误页面
的接口不一致?您的问题本身有一个提示:
return NOT_DONE_YET
这是IResource
如何发出信号的一部分,表明它是否返回一个字符串,调用方必须在显式“完成”请求之前写入该字符串,或者IResource
是否负责执行这些操作
检查您调用的任何对象的返回值render
on,然后相应地执行操作。请包含一个完整的、可运行的示例,这样我们就可以实际运行一些东西并查看行为是什么,而不是猜测。有趣的答案,我将对此进行研究!