2014-04-03 56 views
7

我目前在我的項目urls.py中有這個,最後一行是重要的。Django - 服務媒體/上傳文件在製作

urlpatterns = patterns('', 
    url(r'^', include('polls.urls', namespace="polls")), 
    url(r'^admin/', include(admin.site.urls)), 
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

我被告知,我已經讀過,這不適合生產環境。爲什麼會這樣?

回答

6

Django構建爲「應用程序服務器」,而不是「Web服務器」。

換句話說,從Django提供靜態文件的性能會比使用Apache或Nginx差。這些靜態內容服務器(1)用C語言編寫,(2)針對性能進行了優化。相比之下,Django(1)是用純Python編寫的,(2)爲開發應用程序而優化。

請參閱documentation


這可能是完全沒問題的。我已經使用Django來爲生產中的靜態內容提供服務,當時我知道負載不會太高,而且我沒有提供大文件。這取決於什麼樣的環境「生產」實際上是。


僅供參考,A common生產的設置是使用Nignx,Django的,Gunicorn和監事。 Nginx將來自磁盤的靜態內容和反向代理服務器的其餘部分代理到運行多個Django實例的Gunicorn。主管監督Gunicorn並確保它保持運行。這一切都取決於你需要什麼級別的Web應用程序。

1

不建議從django服務器本身提供靜態文件。推薦的方法是在單獨的服務器中提供服務。檢查static files deployment,那裏你會發現你需要的一切。

+0

我使用webfaction和apache服務我的靜態文件,但我不確定我的媒體如何被服務。媒體文件夾當前位於我的項目文件夾內,而我的'static_files'位於由apache服務的位置之外。我應該將我的媒體文件夾放在static_files中並進行正確的連接?如果我仍然需要'靜態(...)在我的網站,我大多很好奇。是/否回答將足夠,如果你有時間:) – AllTheTime

+1

嘿,我也使用webfaction。我有媒體文件夾也在一個單獨的webfaction應用程序(我想你有一個靜態。)。所以,最後,我爲每個網站提供了3個不同的應用程序,一個用於靜態,另一個用於媒體,另一個用於Django本身。您不需要在urls.py中指定靜態行。你只需要設置適當的{MEDIA,STATIC} _ROOT和{MEDIA,STATIC} _URL(如果需要的話連同STATICFILES_DIRS),將它們指向正確的目標文件夾和配置的URL(您將應用程序指定給您的網站時指定的URL )。 – argaen

+1

順便說一句,不要將媒體文件夾放在static_files中,它們是不同的東西,所以保持分離,以便更好的維護和項目結構。 – argaen

相關問題