2013-03-20 28 views
0

我是Django的新手。我讀過,部署在生產環境中的所有django項目都應該通過web服務器(如apache)提供媒體文件(上傳)。我的問題是 - 爲什麼是django在生產中服務媒體文件(與PHP框架比較)

有大量的PHP框架 - 如。 symfony 1和2 - 不遵循規則。一旦你通過網絡服務器訪問你的應用程序,你不需要改變任何東西,這取決於你部署的環境。在web服務器上只配置了DOCUMENT_ROOT,並且該目錄內的某個位置包含上載目錄 - 就這些了。您可以確定沒有人會訪問PHP,SQL文件等 - 這要歸功於正確的框架體系結構和文檔根目錄。爲什麼它在Django中有所不同?另外,爲不同的環境準備不同的代碼(例如this)是一種相當糟糕的方法,因爲您不能使用完全相同的代碼來在不同的envs中部署項目(並且鏈接中的代碼有意義僅調試ENV。

回答

4

因爲與PHP代碼從Web服務器的公共目錄服務的靜態和媒體文件在一起。所以,當你要求這些靜態文件的Web服務器,直接爲他們服務的,而不前進的道路上執行任意PHP代碼。

在Django中你的代碼單獨運行,所有的請求都通過在Django Python代碼進行處理,這是低效的服務ST atic文件,服務允許像Apache或Nginx這樣的Web服務器直接爲它們提供服務,而不需要通過任何Python代碼。

+0

難道我得到它的權利,使PHP方法比Django的/ Python的方法效率較低,因爲它的工作慢?還有一個問題 - 「在django中,你的代碼是單獨運行的」 - 與PHP框架不一樣?當Web服務器獲得請求時,它執行一個PHP腳本(執行所有框架內容),當PHP腳本結束時,它將響應Web服務器客戶端。區別在哪裏? – ducin 2013-03-22 09:41:16

+0

區別在於文件位置。 – littlepea 2013-03-29 07:34:50

+0

您的PHP文件和您的靜態文件通常都在public_html/htdocs中的任何地方混合,或者任何您的web服務器DOCUMENT_ROOT。在djando中,雖然你的文件通常獨立於web服務器,但django代碼可以在別的地方運行,它甚至可以由一個與擁有web服務器的用戶無關的linux用戶運行。 – littlepea 2013-03-29 07:43:30