gpt4 book ai didi

python - Django:在通用 View 中提供下载服务

转载 作者:太空狗 更新时间:2023-10-29 21:14:53 25 4
gpt4 key购买 nike

所以我想从 /home/username/music 中的文件夹中提供几个 mp3。我不认为这有什么大不了的,但我对如何使用通用 View 和我自己的 url 来做到这一点感到有点困惑。

网址.py

url(r'^song/(?P<song_id>\d+)/download/$', song_download, name='song_download'),

我下面的示例可以在 Django 文档的通用 View 部分找到: 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,而不是它现在所做的,即输出包含所有当前页面 html 的 .mp3。我的模板应该是我的 mp3 吗?我是否需要设置 apache 来提供文件,或者 Django 是否能够从文件系统中检索 mp3(当然是适当的权限)并提供它?如果它确实需要配置 Apache,我该如何告诉 Django?

提前致谢。这些文件都在 HD 上,所以我不需要当场“生成”任何东西,我想尽可能避免泄露这些文件的位置。一个简单的/song/1234/download 会很棒。

最佳答案

为什么要使用通用 View 来执行此操作?在没有通用 View 的情况下很容易做到这一点:

from django.http import HttpResponse


def song_download(request, song_id):
song = Song.objects.get(id=song_id)
fsock = open('/path/to/file.mp3', 'rb')
response = HttpResponse(fsock, content_type='audio/mpeg')
response['Content-Disposition'] = "attachment; filename=%s - %s.mp3" % \
(song.artist, song.title)
return response

我不确定是否可以通过通用 View 以某种方式使这项工作正常进行。但无论哪种方式,在这里使用一个都是多余的。如果没有要呈现的模板,通用 View 自动提供的上下文将毫无用处。

关于python - Django:在通用 View 中提供下载服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2681338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com