简体   繁体   中英

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

I want to response some .png image in my pyramid view. I know the url for that image. I tried urllib, urllib2, requests, but they response object that pyramid view does not understand. My code like this:

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

I tried response.read() too.

Any suggestions? I want that user see image in his web browser

If no renderer specified in your Pyramid view configuration, your view function is supposed to return a Pyramid Response object, you can't just return random stuff :) Apart from the actual response body, the Response object also encapsulates headers, HTTP response code and other stuff needed to build a correct HTTP response.

urllib2.urlopen returns a "file-like object". pyramid.response has a property called body_file which can be assigned a file-like object which contents will be sent to the client.

So, I would start with something like this:

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

or, less, efficient, with .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

(both examples untested, treat as pseudocode)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM