Возврат изображения из представления Django с использованием django-sslserver

Я пытаюсь вернуть изображение из вида Django 1.11 при использовании django-sslserver и Pillow. Вот минимальное представление, которое я сделал для тестирования.

def get_image(request):
    img = Image.open('oh_noes_cat.png', mode='r')
    response = HttpResponse(content_type='image/png')
    img.save(response, 'png')
    return response

В моем шаблоне я использую:

<img src={% url "get_image" %} />

В urls.py я использую:

url(r'^get_image.png', get_image, name='get_image')

Отклик изображения отлично работает с сервером запуска Django, но завершается с ошибками как в django-sslserver, так и в runserver_plus из расширений django. В Chrome я вижу значок разбитого изображения и ошибку "ERR_CONTENT_LENGTH_MISMATCH".

При использовании django-sslserver я получаю ошибку:

[26/Dec/2017 18:55:39] "GET /get_image.png HTTP/1.1" 200 0
Traceback (most recent call last):
  File "/usr/lib/python3.5/wsgiref/handlers.py", line 138, in run
    self.finish_response()
  File "/usr/lib/python3.5/wsgiref/handlers.py", line 180, in finish_response
    self.write(data)
  File "/usr/lib/python3.5/wsgiref/handlers.py", line 279, in write
    self._write(data)
  File "/usr/lib/python3.5/wsgiref/handlers.py", line 453, in _write
    result = self.stdout.write(data)
  File "/usr/lib/python3.5/socket.py", line 593, in write
    return self._sock.send(b)
  File "/usr/lib/python3.5/ssl.py", line 861, in send
    return self._sslobj.write(data)
  File "/usr/lib/python3.5/ssl.py", line 586, in write
    return self._sslobj.write(data)
ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1844)
[26/Dec/2017 18:55:39] "GET /get_image.png HTTP/1.1" 500 59

Кто-нибудь знает, как я могу заставить ответ изображения работать с django-sslserver или аналогичным решением для поддержки SSL в среде разработки Django? Я искал, но не смог найти пример кого-то с этой конкретной проблемой.

Спасибо

1 ответ

Решение

Поскольку не совсем понятно, что Image.save() делает в этом контексте, не могли бы вы попробовать сделать это таким образом?

def get_image(request):
    image_data = open('oh_noes_cat.png', mode='r').read()
    return HttpResponse(image_data, content_type="image/png")
Другие вопросы по тегам