Таким образом, я хочу служить нескольким mp3s от папки в /home/username/music
. Я не думал, что это будет таким грандиозным предприятием, но я немного смущен о том, как сделать это с помощью универсальных представлений и моего собственного URL.
urls.py
url(r'^song/(?P\d+)/download/$', song_download, name='song_download'),
Пример, которому я следую, найден в универсальном разделе представления документации Django: http://docs.djangoproject.com/en/dev/topics/generic-views/ (Это полностью внизу),
Я не на 100% уверен в том, как адаптировать это в соответствии с моими потребностями. Вот мой views.py
def song_download(request, song_id):
song = Song.objects.get(id=song_id)
response = object_detail(
request,
object_id = song_id,
mimetype = "audio/mpeg",
)
response['Content-Disposition'= "attachment; filename=%s - %s.mp3" % (song.artist, song.title)
return response
Я имею на самом деле в недоумении то, как передать это, я хочу, чтобы это выложило мой mp3 вместо того, что это делает теперь, который должен произвести .mp3 со всем текущим содержавшим HTML страниц. Мой шаблон должен быть моим mp3? Я должен установить апача для обслуживания файлов, или может Django для получения mp3 от файловой системы (верные полномочия, конечно) и подача это? Если это действительно должно настроить Apache, как я говорю Django это?
Заранее спасибо. Эти файлы - все на HD, таким образом, я ничего не должен "генерировать" на месте, и я хотел бы предотвратить раскрытие местоположения этих файлов если вообще возможный. Простой/song/1234/download был бы фантастическим.
Почему вы хотите сделать это с помощью общего представления? Это очень легко сделать без общих представлений:
from django.http import HttpResponse
def song_download(request, song_id):
song = Song.objects.get(id=song_id)
fsock = open('/path/to/file.mp3', 'r')
response = HttpResponse(fsock, content_type='audio/mpeg')
response['Content-Disposition'] = "attachment; filename=%s - %s.mp3" % \
(song.artist, song.title)
return response
Я не уверен, можно ли как-то заставить эту работу работать с универсальным представлением. Но в любом случае использование одного здесь излишне. Без шаблона для рендеринга контекст, который автоматически предоставляется общим представлением, бесполезен.
Обслуживание статических файлов с помощью Django - плохая идея, используйте Apache, nginx и т. Д.
https://docs.djangoproject.com/en/dev / howto / static-files / deployment /