Django在提供静态文件方面的表现

时间:2010-09-07 07:21:17

标签: django performance

我正在为一个Django网络应用程序进行原型设计,该应用程序将向用户提供静态媒体文件(PDF,电影等)。我要实现的功能之一是动态URL。关键是为每次访问尝试生成不同的URL。当用户请求文件列表时,我将生成链接并将其保存到数据库。当点击其中一些链接时,我将返回所需的内容并清除数据库中的链接。

我认为通过Django提供媒体远离最佳实践。应该不惜一切代价避免吗?通过非Django应用程序(Perl脚本或其他东西)访问这些文件似乎是否合理?

5 个答案:

答案 0 :(得分:1)

  

我认为通过Django提供媒体远离最佳实践。

正确。官方文档中也是discouraged

  

是否应该不惜一切代价避免?

所有费用?可能不是。如果请求的数量和服务的数据量(相当)足够低,那么使用Django提供静态文件不会对系统的性能产生负面影响。

  

通过非Django应用程序(Perl脚本或其他东西)访问这些文件似乎是否合理?

一般回答:是的。如果不了解您计划的细节,很难给出更好的答案。

答案 1 :(得分:0)

使用django只是为了一些小的开发,禁止;)用于生产 甚至是django team propose web server to serve static files 你可以嵌入cherrypy这将是更好的练习。

答案 2 :(得分:0)

Django iteself声称这是效率不高 不安全。至于我,django静态文件服务只能在开发环境中使用。相当小或大,它不能用于生产......

Documentatin about django static serve

答案 3 :(得分:0)

我认为这个问题是错误的。

Django能够提供静态文件,但默认情况下它在生产时被禁用,并且明确指出它仅用于开发目的。
所以,每个人都同意使用django来提供静态文件是一个坏主意: - )

但是,正如你所说,你不想使用django来提供静态文件,你想使用django在文件下载时实现某种“安全性”。
据我了解,该文件根本不是静态的;相反,它绝对是动态的!

我认为你有两种可能的选择:

  • 使用django解析URL,然后重定向到另一台服务器(例如nginx)以提供文件。这肯定是最快的方式,但它有明显的缺点,即放弃文件的“真实”地址。
  • 使用django解析URL,然后直接提供PDF。它完全实现了您的原始要求(一次性URL),但扩展性能可能非常困难。

我认为第二点需要更多细节 提供文件需要一些时间;使用django来提供服务并不比其他方法效率低(大部分时间花在等待I / O上),但它可能会消耗一个线程或服务器上的进程。
如果您计划同时拥有多个连接,这种方法可能会有严重的缺陷;另一方面,如果你需要向有限的受众提供小文件,那么它可能完全没问题。

答案 4 :(得分:0)

你不能使用NGINX及其安全链接模块吗?
 用django流式传输文件......很慢而且很愚蠢  如果你真的必须使用python通过HTTP传输文件,至少使用Whizzer或Twisted。它将具有良好的性能。他们都可以很容易地挂进django的ORM。