Наличие Django обслуживает загружаемые файлы

Одним из вариантов может быть использование раздела правил urlmager. Создание правила 'controller / method' => 'controller / Method', но я не думаю, что это лучший способ, вы нашли решение этой проблемы, и я также представлял мне этот

230
задан damon 20 July 2009 в 22:10
поделиться

4 ответа

Можно использовать этот простой модуль:

https://github.com/nishant-boro/django-rest-framework-download-expert

Этот модуль обеспечивает простой способ служить файлам для загрузки в платформе отдыха django с помощью модуля Apache Xsendfile. Это также имеет дополнительную функцию обслуживания загрузок только пользователям, принадлежащим конкретной группе

0
ответ дан nicks_4317 27 June 2019 в 17:21
поделиться

Для «лучшего из обоих миров» вы можете объединить решение S.Lott с модулем xsendfile : django генерирует путь к файлу (или самому файлу), но фактическое обслуживание файлов осуществляется Apache / Lighttpd. После того, как вы настроили mod_xsendfile, для интеграции с вашим представлением потребуется несколько строк кода:

from django.utils.encoding import smart_str

response = HttpResponse(mimetype='application/force-download') # mimetype is replaced by content_type for django 1.7
response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name)
response['X-Sendfile'] = smart_str(path_to_file)
# It's usually a good idea to set the 'Content-Length' header too.
# You can also set any other required headers: Cache-Control, etc.
return response

Конечно, это будет работать, только если вы контролируете свой сервер или ваша хостинговая компания уже настроила mod_xsendfile.

РЕДАКТИРОВАТЬ:

mimetype заменен на content_type для django 1.7

response = HttpResponse(content_type='application/force-download'  

РЕДАКТИРОВАТЬ: Для nginx проверьте этот , он использует X-Accel-Redirect вместо apache заголовок X-Sendfile.

185
ответ дан 23 November 2019 в 03:41
поделиться

Django рекомендует использовать другой сервер для обслуживания статических носителей (подойдет другой сервер, работающий на той же машине). Они рекомендуют использовать такие серверы, как lighttp .

Это очень просто настроить. Однако. если 'somefile.txt' создается по запросу (содержимое является динамическим), вы можете захотеть, чтобы django обслуживал его.

Django Docs - Static Files

2
ответ дан 23 November 2019 в 03:41
поделиться

«Загрузка» - это просто изменение заголовка HTTP.

См. http://docs.djangoproject.com/en/dev/ref/request-response/#telling -the-browser-to-treatment-the-response-as-a-file-attachment , чтобы узнать, как ответить загрузкой.

Вам нужно только одно определение URL для "/ download" .

Словарь запроса GET или POST будет содержать информацию "f = somefile.txt" .

Ваша функция просмотра просто объединит базовый путь со значением « f », откройте файл, создайте и верните объект ответа. Он должен содержать менее 12 строк кода.

85
ответ дан 23 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: