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-диска, которую вы могли бы при чтении этого вопроса прочитать. Пока активность вашего диска не слишком высока, вероятность этого крошечного изображения, являющегося частью кэша диска, кажется вероятной.