2012-07-08 56 views
1

假設我正在構建一個託管網店的Django驅動站點,我們稱之爲webshop.com。我希望它能像這樣工作:我應該如何設置和部署跨越多個子域和多個數據庫的django項目?

一家名爲Foo的商店想要一個網上商店。他們在webshop.com註冊並創建了子域foo.webshop.com,以及數據庫foo_DB。 Foo的所有者使用管理界面在foo.webshop.com/admin上輸入他們的產品。客戶可以從foo.webshop.com購買產品。

商店酒吧有網店bar.webshop.com - 與webshop.com上的其他網店完全無關。等等。 webshop.com應該能夠託管100多家商店。

現在的問題是:我應該如何去與Django做這個?

起初我想我應該爲每個網店有一個settings.py文件,一個虛擬服務器和一個數據庫。不過,我擔心它可能會因運行所有這些實例而產生太多開銷。

任何指針或想法,非常感謝!

回答

1

也許你可以使用django-sudomainshttps://github.com/tkaemming/django-subdomains/

這是它創建爲每個請求的子域屬性中間件。

由於每個站點的功能相同,因此您可以根據請求的sudomain查詢產品。你也可以爲用戶分配一個子域名。

所有視圖都是相同的,除非他們考慮到這個子域。對於1個共享數據庫,每個模型都有一個指向子域的字段或一個子域爲數據庫naem的共享數據庫,這種方法可以輕鬆實現。 https://docs.djangoproject.com/en/dev/topics/db/multi-db/#manually-selecting-a-database-for-a-queryset

1

我已經構建了6個這樣工作的應用程序(儘管Python中沒有,但在這種情況下真的無關緊要)。

服務於同一虛擬主機的所有內容。獲取帶有urlparse的服務器名稱一旦有了要匹配的字符串,請在主數據庫中查找與您的客戶數據庫(即主機名,用戶名,密碼等)匹配的數據庫詳細信息。確保在查詢之前清理該值。

我認爲你最好的選擇是分離你的客戶數據庫。這不僅可以確保一個數據庫問題不會導致您的所有客戶站點停止運行,還可以讓您將它們放在不同的服務器上。

+0

謝謝!但是在Django中做這件事的最佳做法是什麼? – krgr 2012-07-08 21:07:43

+0

所有網站的一個settings.py文件。一個虛擬主機適用於所有網站。每個網店有一個數據庫。 – 2012-07-08 22:25:49