如何向另一台服务器发送请求并在金字塔视图中响应结果?

How to send request to another server and response the result in pyramid view?

我想在我的金字塔视图中响应一些 .png 图像。我知道该图像的 url。 我尝试了 urllib、urllib2、请求,但它们响应金字塔视图不理解的对象。 我的代码是这样的:

def image_handler(request):
    url = "http://someurl.com/image.png"
    import urllib2
    response = urllib2.urlopen(url)
    return response

我也试过response.read()

有什么建议吗? 我希望该用户在他的网络浏览器中看到图像

如果您的金字塔视图配置中没有指定 renderer,您的视图函数应该 return 金字塔响应 object,您不能只是 return 随机东西 :) 除了实际响应 body,响应 object 还封装了 headers、HTTP 响应代码和构建正确 HTTP 响应所需的其他内容。

urllib2.urlopen returns a "file-like object". pyramid.response 有一个名为 body_file 的 属性 可以分配一个 file-like object 其内容将被发送到客户端。

所以,我会从这样的事情开始:

import urllib2

def image_handler(request):
    url = "http://someurl.com/image.png"
    image_file = urllib2.urlopen(url)
    request.response.body_file = image_file
    request.response.content_type = 'image/png'  
    return request.response

或者,效率更低,.read()

def image_handler2(request):
    url = "http://someurl.com/image.png"
    image_blob = urllib2.urlopen(url).read()
    request.response.body = image_blob
    request.response.content_type = 'image/png'  
    return request.response

(两个例子都未经测试,视为伪代码)