Django: возвращает данные изображения из вида

Я хочу, чтобы представление возвращало данные изображения. так что что-то вроде строк

return HttpResponse(image_data, mimetype="image/png")

Я знаю, что могу сделать file.read() для получения данных изображения, но поскольку изображение мало (например, 1x1 px), я хочу просто сохранить его как строковый объект (или любой объект, который я могу скопировать и вставить в свой код). Таким образом, я сохраняю поиск на диске каждый раз, когда изображение попадает.

Как мне это сделать? Я уверен, что это легко, я просто не уверен, какие условия использовать для поиска.

p.s. Я знаю, что в Django обычно нет изображений таким образом.

Ответ 1

Вот простой пример из проект django-openid

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
    """

Ответ 2

Вы можете использовать base64. Но вы можете обнаружить, что повышение производительности почти не имеет значения, так как ваше изображение будет храниться в кеше диска. Мне было бы интересно увидеть тесты декодирования base64 и доступа к диску. Вы даже можете обнаружить, что эта оптимизация будет иметь обратный эффект.

Изменить: я нашел эту страницу в кеше Linux-диска, которую вы могли бы при чтении этого вопроса прочитать. Пока активность вашего диска не слишком высока, вероятность этого крошечного изображения, являющегося частью кэша диска, кажется вероятной.