如何向另一台服务器发送请求并在金字塔视图中响应结果?
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
(两个例子都未经测试,视为伪代码)
我想在我的金字塔视图中响应一些 .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
(两个例子都未经测试,视为伪代码)