#python #django #django-views
#python #django #django-просмотры
Вопрос:
У меня есть представление Django, которое возвращает файл. Создан FileResponse
для этой цели. Однако я не понимаю, как это проверить.
Прямо сейчас я использую HttpResponse
и тестирую его следующим образом:
response = client.get(url)
io = io = BytesIO(response.content)
Теперь io
объект можно использовать для дальнейшего тестирования.
Однако, если я попробую выполнить следующее с FileResponse
помощью (который является производным от StreamingHttpResponse
и, следовательно, имеет streaming_content
вместо content
), я получаю следующее исключение:
TypeError: a bytes-like object is required, not 'map'
Если я приведу map
объект к bytes
подобному:
response = client.get(url)
io = io = BytesIO(bytes(response.streaming_content))
Я получаю другое исключение: TypeError: 'bytes' object cannot be interpreted as an integer
Как я могу получить BytesIO
объект из FileResponse.streaming_content
?
Комментарии:
1.
streaming_content()
является итератором строк, поэтому вы должны выполнить итерацию по нему. На самом деле вы можете выполнить итерацию по ответу напрямую (__iter__()
определяется какself.streaming_content
)
Ответ №1:
streaming_content является итеративным, а не байтовым, поэтому вам придется присоединиться к ним.
fileres = bytes("test", 'utf-8')
stream = b''.join(response.streaming_content)
assert stream == fileres
Ответ №2:
response.getvalue() отвечает за преобразование из map в байты:
bytes_io = BytesIO(response.getvalue())