2012-10-23 40 views
7

我正在構建一個應用程序,假定其工作流程存在特定的組和權限。例如,「成員」可以登錄到應用程序並查看和編輯其個人數據,但無法看到通常在同一屏幕上顯示的筆記。 「員工」可以看到這些筆記並創建或編輯自己的筆記,但只有「成員管理員」才能刪除或編輯任何人的筆記。應Django組和權限是硬編碼還是引導?

我的問題是引導這個應用程序的數據。我可以爲這些組創建JSON夾具數據,但是我必須對PK進行硬編碼,這似乎是不好的做法(如果我想使用的第三方應用做同樣的事情併發生衝突會怎麼樣?)更大問題是權限 - 我必須將PK添加到權限,而權限又會將PK添加到其內容類型中。

我讀過關於使用post_syncdb鉤子以更具編程性的方式添加初始數據,我希望能幫助我解決硬編碼的PK問題。但我想知道這是否是解決這個問題的最佳解決方案,或者如果我在這裏「濫用」了Django Group和Permission概念,並且應該做其他事情,比如創建新模型或者只是放置標誌(比如「我的用戶個人資料模型等)

回答

0

通常創建一個名爲init與管理命令initialize,我把那裏的所有代碼來引導應用程序。這使您可以:

  • 如果使用部署工具(我用[Ansible(http://www.ansible.com/home,蝙蝠可能是艾米工具面料,慶典......),你可以自動執行過程並從德的init應用安裝的應用程序供應後(第一次安裝)

  • 檢查命令已經推出跳過過程(Group.objects.all().exists()?)

(或兩者兼而有之)

我發現這個解決方案非常容易維護,並且對於任何情況都足夠強大。

post_syncdb(在djang 1.7 post_migrate)不是因爲被稱作每個遷移

如果你只需要加載數據和/或創建記錄(即組/管理員...)解決方案的最佳解決方案恕我直言數據遷移](https://docs.djangoproject.com/en/1.7/topics/migrations/#data-migrations

相關問題