Django 德扬戈。如何提供mp3文件?

Django 德扬戈。如何提供mp3文件?,django,html,python-2.7,audio,Django,Html,Python 2.7,Audio,最近,我在通过音频标签提供模板中的.mp3文件和提供下载时遇到了一些问题。我解决了这个问题,虽然我猜解决方案很差。这就是为什么我在这里问。我正在使用Django 1.4 Python 2.7 我是这样做的(我选择像静态文件一样提供服务,并在另一个视图中提供下载,因为第一个视图将打开一个新选项卡并播放文件): models.py class Audio(models.Model): id_audio = models.IntegerField(primary_key=True) date_crea

最近,我在通过音频标签提供模板中的.mp3文件和提供下载时遇到了一些问题。我解决了这个问题,虽然我猜解决方案很差。这就是为什么我在这里问。我正在使用Django 1.4 Python 2.7

我是这样做的(我选择像静态文件一样提供服务,并在另一个视图中提供下载,因为第一个视图将打开一个新选项卡并播放文件):

models.py

class Audio(models.Model):
id_audio = models.IntegerField(primary_key=True)
date_created = models.DateTimeField()
file_link = models.CharField(max_length=45, unique=True)
class Meta:
    db_table = u'audio'
views.py

from django.views.static import serve
def customize_media_serving(request, path, document_root=None, show_indexes=False):
    """
    Serve audios as static files for html5 audio tag
    """
    # here is my custom filter which controls access to this view
    return serve(request, full_path, document_root, show_indexes)

def sound_download(request, sub_folder, filename):
    """
    Provides audio file downloads
    """
    path_to_mp3 = 'media/sound/'

    fsock = open(path_to_mp3+sub_folder+'/'+filename, 'rb')
    response = HttpResponse(fsock, mimetype='audio/mpeg')
    response['Content-Type'] = 'audio/mp3'
    response['Content-Disposition'] = "attachment; filename=%s" % \
        (filename.replace(' ', '-'), )
    response['Content-Length'] = \
        os.path.getsize(path_to_mp3+sub_folder+'/'+filename)
    return response
url.py

url(r'^sound_download/(?P<sub_folder>[\w-]+)/(?P<filename>[\w\s\.-]+)/$',views.sound_download, name=u'Get lead audios history'),
url(r'^media/sound/(?P<path>[\w\s\./_-]+)$', views.customize_media_serving, {'document_root': settings.MEDIA_ROOT, }),
所有文件都复制到静态目录中

这些文件不在公共目录“static”中的原因是,它们将在站点运行期间上载

我想有更好的解决办法。我的似乎不完全正确。它就像一辆有着长方形后轮的自行车:它在移动,但有些地方出了问题。我接受任何建议

是的,我读过一些关于提供mp3文件和音频标签的问题


正如你所看到的,这两个有点帮助你真的不应该试图通过Django服务这些。我建议你应该把.mp3文件放在Amazon S3中,使用<代码> Django Stime<代码>。除了已经给出的极好的建议,请考虑升级到Django的安全版本。1.4已经严重过时。谢谢大家的回复@DanielRoseman,所以我应该使用我的nginx设置以某种方式组织它。我说得对吗?这些MP3是静态的。下一个问题是通过简单的点击下载记录。
<!-- audio is an instance of the model Audio -->
    <tr>
        <td>{{ audio.call_date }}</td>
        <td>
        <audio preload="auto" controls="" class="history_audio_player">
            <source type="audio/mpeg" src="/media/sound/{{ audio.file_link }}" />
            {% trans "This text displays if your Internet browser doesn't support the audio player." %}
        </audio>
        <a href="/sound_download/{{ audio.file_link }}" class="audio_download">
            <img src="{{ STATIC_URL }}img/download.png" style="height:30px;"/>
        </a>
        </td>
    </tr>
python manage.py collectstatic