Python 为什么不在生产环境中使用Django提供静态文件?

Python 为什么不在生产环境中使用Django提供静态文件?,python,django,apache,static,settings,Python,Django,Apache,Static,Settings,我遇到了settings.py的以下示例: if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 被告知: static()helper函数适用于开发,但不适用于 生产使用。永远不要使用Django在服务器中提供静态文件 生产环境 有人能解释为什么以及如何更好地使用它吗 编辑: 我可以将static()与Apache一起使用吗?Django在提供静态

我遇到了
settings.py的以下示例:

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
被告知:

static()helper函数适用于开发,但不适用于 生产使用。永远不要使用Django在服务器中提供静态文件 生产环境

有人能解释为什么以及如何更好地使用它吗

编辑:


我可以将static()与Apache一起使用吗?

Django在提供静态文件时速度不快,效率也不高。引用Django文档的话,“这种方法效率极低,可能不安全,因此不适合生产。”最好使用专门为服务静态内容而设计的工具。在上的Django文档中有大量关于如何设置静态服务器的说明


基本思想是不要不必要地让Django参与静态文件的服务。让您的生产服务器(从您的评论听起来像是apache)直接为静态文件提供服务。下面是编辑httpd.conf文件以使apache为静态文件提供服务的说明。django中的static()函数根本不应该涉及。确保使用django中的collectstatic管理命令将所有静态文件复制到静态根目录中,以便apache可以找到它们。

查看这些提示@nbryans这些提示很有趣,但我一般看不到问题的答案。它还告诉您不要使用带有“manage.py runserver”的静态文件。我想了解为什么我不应该在Apache中使用它?如果您想从WSGI服务器提供静态文件,这是一个更好的选择。如果设置允许,WhiteNoise将使用Web服务器使用
sendfile()
系统调用直接从磁盘推送实际文件内容。
static()。只要有可能,就应该避免这些额外的层,尤其是对于更大的文件。与WhiteNoise相比,使用专门构建的web服务器的功能更好。因此,如果使用Apache/mod_wsgi,请使用Apache来处理静态文件,而不是WhiteNoise。如果在nginx后面使用uWSGI或Gunicorn,请使用nginx。但是,您可能仍然希望使用WhiteNoise的一个原因是,如果与CDN一起工作以缓存内容。