这可能是一个愚蠢的问题,但在文档中说:
在开发期间提供用户上传的文件。
在开发过程中,您可以从中提供用户上传的媒体文件 MEDIA_ROOT使用
django.contrib.staticfiles.views.serve()
视图。这不适合生产使用!对于一些常见的部署 策略,请参阅部署静态文件。
例如,如果您的MEDIA_URL定义为/ media /,则可以执行此操作 将以下代码段添加到您的urls.py:
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # ... the rest of your URLconf goes here ... ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
这是否意味着生产用+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
不应该使用或应该使用?
我理解这一点的方式是你不应该使用django.contrib.staticfiles.views.serve()
,但我不确定这是不是一样
答案 0 :(得分:3)
django.contrib.staticfiles.views.serve()
不应用于部署。
首先,在任何地方调用views.serve()
只会在DEBUG = True
时有效,并且如果在Http404
时使用,则会提高DEBUG = False
,就像部署应用时一样。但是,在开发中使用它的好处是,您不必运行collectstatic
/收集静态文件:您可以从静态或媒体根中提取它们,而无需移动任何东西。
它也有些不安全:views.serve()
将使用mimetype
模块猜测其服务文件的内容类型,该模块将依赖于您正在开发的平台的地图文件:由于特定环境中的mimetype模块,生产行为可能不同。
文档在django.contrib.staticfiles.views.serve()
上有更多内容。
现在谈到制作,提供静态/媒体文件并不是Django的WSGI能为你做好的事情。 Django是为服务应用程序内容而编写的,在提供静态/用户上传内容方面效果不佳。如果您期望中等负载,使用单独的服务器(例如Apache或Nginx)与uWSGI等网络服务器相结合,则更具可持续性,可以处理更多问题。 This doc详细介绍了如何设置/解释更多内容。
答案 1 :(得分:1)
在制作中,你应该有Debug = False
。当你这样做时,Django不再提供静态文件。
一个受欢迎的替代品是使用亚马逊的S3 Buckets。例如,假设您创建了一个新存储桶。您的MEDIA_URL
看起来像是:
MEDIA_URL = 'bucket.s3.amazonaws.com/media'
您将以相同的方式提供静态文件。
这会回答你的问题吗?