Лучший способ записать изображение в Django HttpResponse () - PullRequest
41 голосов
/ 09 июня 2010

Мне нужно безопасно предоставлять изображения только проверенным пользователям (то есть они не могут быть использованы в качестве статических файлов). В настоящее время у меня есть следующий вид Python в моем проекте Django, но он кажется неэффективным. Есть идеи для лучшего способа?

def secureImage(request,imagePath):
    response = HttpResponse(mimetype="image/png")
    img = Image.open(imagePath)
    img.save(response,'png')
    return response

(изображение импортировано из PIL.)

1 Ответ

74 голосов
/ 05 апреля 2013

Ну, иногда требуется перекодирование (то есть нанесение водяного знака на изображение при сохранении оригинала нетронутым), но для самых простых случаев вы можете использовать:

try:
    with open(valid_image, "rb") as f:
        return HttpResponse(f.read(), content_type="image/jpeg")
except IOError:
    red = Image.new('RGBA', (1, 1), (255,0,0,0))
    response = HttpResponse(content_type="image/jpeg")
    red.save(response, "JPEG")
    return response
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...