2016-11-29 52 views
0

我有一个Django网络应用程序,需要访问音频wav文件。我有一个包含wav文件的文件服务器,该文件被挂载到存储我的Web应用程序文件的Web服务器上。然后我将这些文件下载到我的本地文件系统中,这样我的Web应用程序就可以在本地开发它时访问它。从挂载的文件系统访问文件与Web服务器上的本地文件(生产vs dev)

我的问题是关于如何从我的web应用程序访问生产与本地的文件。我想在我的Javascript我需要有两个不同的配置,检查我的Web应用程序是否在生产或开发。如果在生产环境中,我会使用安装文件服务器的路径,如果在开发中,我会在计算机上使用本地文件系统的路径。 Django或Javascript提供了一种方式来做这件事吗?这是接近从Web应用程序获取文件的正确方法吗?

我可以想到的其他选项只是将wav文件和我的web应用程序一起上载到Web服务器,以便我可以在本地在生产环境中访问它,而不必从已装入的文件系统访问它,但我不是确定这会如何影响性能,并且可能会导致每次添加或删除记录时都必须上传文件。

该方法会更好还是第一种方法会更好?

+0

你实际上是在Python代码中加载.wav文件的内容吗?或者你只是向客户提供服务? –

+0

实际上在JavaScript(前端)或python(后端)中加载.wav文件的内容,以便用户可以播放音频文件 – user3226932

回答

0

您的目标是用户可以在使用您的Web应用程序时收听音频文件。这大多不是Django特有的。

我建议你的Django项目应该有一个设置,例如settings.AUDIO_FILES_URL指向你的音频文件的服务地点。使用上下文处理器将该设置添加到您的模板渲染上下文作为AUDIO_FILES_URL可能会很方便,或者您可以显式执行。在变量的值中包含尾部斜线是一个很好的约定(这就是通常使用STATIC_URL的方式)。在每个设置文件中正确设置值,无论是测试还是生产。

然后在您的HTML模板中,您可以为特定音频文件构建一个URL。你可能会做这样的事情:

<span data-audio-file-url="{{ AUDIO_FILES_URL }}{{ audio_file_path }}">{{ audio_file_description }}</span>

最后,你的JavaScript代码可以读取URL和创建你喜欢的任何接口。请注意,javascript不需要知道它是否是生产系统。 (你可以代替避开JavaScript和作出的HTML5音频元素,如果你喜欢。)

在生产中,Django的应该只知道音频文件的基本URL,它应该参与为他们提供服务。为他们提供服务是您需要配置网络服务器的工具,例如Apache,Nginx或您正在使用的任何服务器。你甚至可以从不同的主机提供文件 - 也许你的文件服务器也是一个静态的文件网络服务器。

此外,我认为这将是善待您的用户服务.mp3而不是.wav!

+0

如何从HTML或Javascript访问Django设置变量? – user3226932

+0

我将urlpatterns + = static(settings.MEDIA_URL,document_root = settings.MEDIA_ROOT) 添加到我的urls.py中,但reactjs将该变量当作字符串处理 user3226932

+0

我还将django.core.context_processors.media添加到了我的settings.py模板中,但它仍然无法工作 – user3226932

相关问题