相关疑难解决方法(0)

Django:在自定义URL后面提供媒体服务

所以我当然知道通过Django提供静态文件将直接送你到地狱但我很困惑如何使用自定义网址使用Django掩盖文件的真实位置. Django:在通用视图中提供下载,但我接受的答案似乎是"错误的"做事方式.

urls.py:

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

views.py:

def song_download(request, song_id):
    song = Song.objects.get(id=song_id)
    fsock = open(os.path.join(song.path, song.filename))

    response = HttpResponse(fsock, mimetype='audio/mpeg')
    response['Content-Disposition'] = "attachment; filename=%s - %s.mp3" % (song.artist, song.title)

    return response
Run Code Online (Sandbox Code Playgroud)

事实证明,这种解决方案非常完美,但并不完美.如何在仍然通过nginx/apache服务的同时避免直接链接到mp3?

编辑1 - 附加信息

目前我可以使用如下地址获取我的文件: http://www.example.com/music/song/1692/download/ 但上面提到的方法是魔鬼的工作.

如何让nginx/apache服务于媒体,我怎样才能完成上面的工作?这是应该在网络服务器级别完成的吗?有些疯狂的mod_rewrite?

http://static.example.com/music/Aphex%20Twin%20-%20Richard%20D.%20James%20(V0)/10%20Logon-Rock%20Witch.mp3

编辑2 - 额外的附加信息

我使用nginx作为我的前端和反向代理返回apache /开发服务器所以我认为如果它确实需要某种mod_rewrite工作,我将不得不找到一些适用于nginx的东西.

python django nginx url-rewriting

21
推荐指数
1
解决办法
6442
查看次数

标签 统计

django ×1

nginx ×1

python ×1

url-rewriting ×1