django:从视图返回图像数据

时间:2011-12-13 01:38:47

标签: python django binary httpresponse

我想要一个视图来返回图像数据。

之类的东西
return HttpResponse(image_data, mimetype=”image/png”)

我知道我可以用file.read()来获取图像数据,但由于图像很小(如1x1像素),我想将其存储为字符串对象(或者我可以复制和粘贴的任何对象)在我的代码中)。这样,每次查看视图时,我都会自行保存磁盘查找。

我该如何解决这个问题?我确信这很容易,我只是不确定用于搜索的条款。

P.S。我知道用Django通常不会以这种方式提供图像。

2 个答案:

答案 0 :(得分:12)

以下是django-openid project

中的一个简单示例
def logo(request):
    return HttpResponse(
        OPENID_LOGO_BASE_64.decode('base64'), content_type='image/gif'
    )
    # Logo from http://openid.net/login-bg.gif
    # Embedded here for convenience; you should serve this as a static file
    OPENID_LOGO_BASE_64 = """
    R0lGODlhEAAQAMQAAO3t7eHh4srKyvz8/P5pDP9rENLS0v/28P/17tXV1dHEvPDw8M3Nzfn5+d3d
    3f5jA97Syvnv6MfLzcfHx/1mCPx4Kc/S1Pf189C+tP+xgv/k1N3OxfHy9NLV1/39/f///yH5BAAA
    AAAALAAAAAAQABAAAAVq4CeOZGme6KhlSDoexdO6H0IUR+otwUYRkMDCUwIYJhLFTyGZJACAwQcg
    EAQ4kVuEE2AIGAOPQQAQwXCfS8KQGAwMjIYIUSi03B7iJ+AcnmclHg4TAh0QDzIpCw4WGBUZeikD
    Fzk0lpcjIQA7
    """

答案 1 :(得分:1)

您可以考虑使用base64。但是您可能会发现性能提升几乎无关紧要,因为您的映像将存储在磁盘缓存中。我有兴趣看看base64解码与磁盘访问的基准。您甚至可能会发现此优化会产生相反的效果。

编辑:我发现这个page on the linux disk cache,您在做出这个决定时可能会感兴趣。只要你的磁盘活动不是太高,这个微小的图像很可能成为磁盘缓存的一部分。