Одним из вариантов может быть использование раздела правил urlmager. Создание правила 'controller / method' => 'controller / Method', но я не думаю, что это лучший способ, вы нашли решение этой проблемы, и я также представлял мне этот
Можно использовать этот простой модуль:
https://github.com/nishant-boro/django-rest-framework-download-expert
Этот модуль обеспечивает простой способ служить файлам для загрузки в платформе отдыха django с помощью модуля Apache Xsendfile. Это также имеет дополнительную функцию обслуживания загрузок только пользователям, принадлежащим конкретной группе
Для «лучшего из обоих миров» вы можете объединить решение 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.
Django рекомендует использовать другой сервер для обслуживания статических носителей (подойдет другой сервер, работающий на той же машине). Они рекомендуют использовать такие серверы, как lighttp .
Это очень просто настроить. Однако. если 'somefile.txt' создается по запросу (содержимое является динамическим), вы можете захотеть, чтобы django обслуживал его.
«Загрузка» - это просто изменение заголовка 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 строк кода.