2012-04-18 82 views
0

我想構建一個Django應用程序,每個「用戶集」可以看到不同的數據,因爲他們使用不同的數據庫。有沒有最佳做法來實現這一目標?Django:提示用戶隔離數據集

E.g. 用戶A在登錄後查看並管理他自己的數據,但無法查看其他人的數據。

我可以使用Django多數據庫功能來定義幾個數據庫並根據當前請求的用戶創建一個automatic router指向正確的數據庫(保持auth_user在一個公共數據庫上)。

作爲最後的機會,我可以爲每個組創建一個不同的應用程序文件夾(唯一的區別是數據庫名稱),但我更喜歡更智能的解決方案。

+0

問題是什麼?什麼樣的數據?你使用django.auth來管理用戶嗎?你有用戶配置文件嗎?你在使用django.auth組嗎?這太模糊了,可以回答的問題。 – 2012-04-18 11:39:06

回答

1

你可以考慮重新使用many per-object permission apps for django之一。

另一種可能性是製作不同的設置文件。例如,settings_groupA.py:

from settings import * 
DATABASES = ... 

然後你可以使用管理命令,如執行syncdb或runserver命令,等等等等......與--settings選項:

--settings=SETTINGS The Python path to a settings module, e.g. 
         "myproject.settings.main". If this isn't provided, the 
         DJANGO_SETTINGS_MODULE environment variable will be 
         used. 

例子:

./manage.py syncdb --settings=settings_groupA 
./manage.py runserver --settings=settings_groupA 

使用每組用戶的一個數據庫的好處是,你可以讓你的代碼更容易,讓他們有沒有黑客django.contrib.admin原生支持。但是,如果你要在一個組中擁有每個對象的權限,那麼你最好直接選擇第一個解決方案。

+0

我實際上正在考慮通過自動數據庫路由器根據用戶切換數據庫使用多個數據庫。你認爲這是一個好主意嗎? (我在問題中插入這個) – Don 2012-04-18 12:10:52

+1

也許如果你查詢用戶數據庫,你可以將請求的連接遊標切換到另一個數據庫。但是這要比每個數據庫只使用一個django實例需要更多的關注,所以我會在朝這個方向前確定地思考兩次。 – jpic 2012-04-18 12:24:07