2012-01-05 145 views
2

我正在爲學習目的創建一個小的saas ...我知道最好的方法是爲每個用戶分別創建一個模式...但是我的saas是一個小應用程序,而我實際上不需要單獨的模式,而且它會使東西複雜化(後來對模式進行更改)...因此,我將對所有用戶使用相同的模式,並將每個用戶的ID附加到條目中,然後僅顯示用戶登錄後的條目。Django多用戶saas

有沒有一種方法可以在通過中間件登錄時「預先加載」用戶ID?或者我需要調整所有查詢(按用戶ID過濾)?我已經將用戶的ID存儲到他的條目中...所以我只需要這個用於選擇的條目。

謝謝!

+1

我不知道有什麼方法可以自動過濾基於request.user的查詢集。這是因爲ORM不與django.contrib.auth耦合。我做了兩個SaaS設計,一個數據庫和所有查詢集的手動過濾(無django.contrib.admin),一個數據庫每個用戶都可以輕鬆啓用django.contrib.admin(也可以使用admindoc和django- dbtemplates)。我更喜歡後者,儘管這是關於系統管理的更多工作。 – jpic 2012-01-05 10:11:36

+0

@jpic:請將您的答案作爲答案發布,以便我們可以對它進行點贊和評論。 – 2012-01-05 10:47:15

回答

2

我不知道有任何方法來自動篩選基於request.user的查詢集。這是因爲ORM不與django.contrib.auth耦合。

我嘗試了兩種SaaS的設計:

  1. 1數據庫的所有網站,和手動過濾所有查詢集。當然,這使得django.contrib.admin無法使用。可以通過設置爲django-authority或甚至other django per-object permission packagesgoogle cached version because djangopackages.com is down ATM)來啓用django.contrib.admin。每個站點

  2. 1個數據庫,這只是更容易,保持代碼更加清晰,並能django.contrib.admin開箱,如果安裝了django admin theme它可以是很酷的。我還啓用了django.contrib.admindoc以及django-dbtemplates

(顯然是在你的情況下,1個網站= 1級的用戶,但概念是相同的)

我喜歡第二個實現,因爲它顯然是一個不太大量的開發工作,這是一個小補償系統管理。

+0

你有任何建議選項#2。我真的不需要子域名...這是一個小型的學習項目...所以我需要在用戶登錄時更改模式... – Mission 2012-01-05 12:21:27

+0

對於選項#2簡短回答:我推薦一個具有root訪問權限的服務器,uWSGI + nginx因爲它以非常優雅的方式支持多站點django應用程序:您只需爲N個客戶端配置一次即可。無論選擇哪種數據庫服務器或Linux發行版都無關緊要 - 您始終可以自動創建數據庫。如果你想我可以開源的應用程序和配置我們有,以便您可以在今天晚些時候或明天再現它。我碰到的唯一的「問題」是我沒有找到一個多站點的後臺工作經理(即ztaskd),但在大多數情況下你並不需要它。 – jpic 2012-01-05 15:04:19

+0

您可以執行諸如基於request.user過濾所有查詢集的操作,方法是使用指定該過濾器的模型管理器覆蓋模型的管理器;因此,'Thingy.objects.all()'會將您與當前的請求用戶綁定。或者,你可以給它一個額外的管理器,這樣你可以使用'Thingy.objects_for_user.all()'或類似的。 – 2013-06-06 07:22:53