Просто наткнулся на несколько плохой совет (для производства) и подумал, что упомяну X-Sendfile, который работает как с Apache, так и с Nginx и, возможно, с другими веб-серверами.
https://pythonhosted.org/xsendfile/
Современные веб-серверы, такие как Nginx, обычно могут обслуживать файлы быстрее, эффективнее и надежнее, чем любое веб-приложение, которое они размещают. Эти серверы также могут отправлять клиенту файл на диске, как указано веб-приложениями, которые они размещают. Эта функция широко известна как X-Sendfile.
Эта простая библиотека позволяет любому приложению WSGI использовать X-Sendfile, чтобы они могли контролировать, можно ли обслуживать файл или что еще делать, когда файл обслуживается, без написания специфичных для сервера расширений. Варианты использования включают в себя:
Ограничьте загрузку документов только пользователям, прошедшим проверку подлинности.
Запишите, кто скачал файл. Принудительно загружайте файл, а не отображайте его в браузере, или обслуживайте его с именем, отличным от имени на диске, установив заголовок Content-Disposition.
Основная идея заключается в том, что вы открываете файл и передаете этот дескриптор веб-серверу, который затем возвращает байты клиенту, освобождая ваш код Python для обработки следующего запроса. Это гораздо более производительно, чем решение выше, поскольку медленный клиент на другом конце может зависнуть в потоке Python на столько времени, сколько потребуется для загрузки файла.
Вот репозиторий, который показывает, как это сделать для различных веб-серверов, и хотя он довольно старый, он, по крайней мере, даст вам представление о том, что вам нужно делать. https://github.com/johnsensible/django-sendfile
person
boatcoder
schedule
30.08.2019
HttpResponse()
- person kenorb   schedule 29.05.2015FileResponse
для обслуживания файлов вместоHttpResponse
. - person Boris   schedule 23.11.2020