2011-03-18 66 views
2

要求:啓用您的Django應用程序的一個實例爲多個客戶端提供服務。通過客戶端,我們可以指不應該訪問彼此數據的不同域或不同帳戶。如何在django應用程序內部實現多個網站?

預計客戶數量約爲數百人。

我敢肯定,有很多,但我正在尋找一個最大限度地減少長期努力的人。其中有兩個可能是:

  1. 一個是使用在Django的sites framework和一個數據庫,並添加對於大多數車型site_id(聽起來很嚇人)
  2. 美國一個數據庫進行認證和站點模塊,並使用multi-database功能可將客戶特定模型數據保存在單獨的數據庫中。這也讓我感到害怕,因爲我應該爲新客戶實現動態數據庫創建,更糟糕的是,當我升級應用程序時,我不知道如何處理數據庫遷移。

你對此有何建議?

+0

如果您需要在您的網站上共享數據,我認爲選項2將不再相當可觀 - 因此您確定這不會成爲需求? – 2011-03-18 17:42:22

+0

我不想跨站點共享數據,實際上唯一需要集中的是網站配置和帳戶管理。超級管理員應該能夠管理網站並創建管理員帳戶,這些帳戶只能訪問一個特定的網站。 – sorin 2011-03-18 22:37:22

+0

那麼爲什麼要讓這個項目脫離這些呢?您可以創建自己的授權後端,使您可以在兩個網站上登錄... – 2011-03-18 23:49:14

回答

0

如果您可以爲每個站點使用不同SITE_ID的同一個應用程序的多個實例,那麼這將是首選選項。這樣你可以爲每個站點使用不同的數據庫,或者可靠地使用Django站點框架。

如果您希望單個進程或少量進程爲數百個站點提供服務,但它可能會彎曲Django的當前設計。使用Site.objects.get_current()依賴於SITE_ID,因此您必須使用其他方法來確定當前網站。

提供您需要的功能的一個軟件包是django-threaded-multihost,您可以根據每個請求使用get_current_host來獲取不同的站點。

唯一的缺點是,任何使用Site.objects.get_current()的Django應用程序都需要使用這種設置進行修改,這使得難以使用某些可插拔應用程序的尷尬使用 - 您將不得不猴子補丁或使用應用程序爲了多線程的使用而創建了自己。

所以,這是可能的,但目前對於Django來說並不是那麼好。