Django组和权限应该硬编码还是自举?

Ton*_*ony 7 django permissions bootstrapping usergroups

我正在构建一个应用程序,假定其工作流程存在某些组和权限.例如,"成员"可以登录应用程序并查看和编辑他们的个人数据,但无法看到通常会在同一屏幕上显示的注释."员工"可以查看这些笔记并创建或编辑自己的笔记,但只有"会员管理员"才能删除或编辑任何人的笔记.

我的问题是引导这个应用程序的数据.我可以为组创建JSON fixture数据,但是我必须对PK进行硬编码,这看起来像是不好的做法(如果我想使用的第三方应用程序做同样的事情并且存在冲突会怎样?)更大问题是权限 - 我必须将PK添加到权限,而权限反过来又会有PK到他们的内容类型.

我已经读过使用post_syncdb钩子以更加编程的方式添加初始数据,我希望这将有助于我解决硬编码的PK问题.但我想知道这是否是这个问题的最佳解决方案,或者我是否"滥用"Django组和权限概念,在这里,应该做其他事情,比如创建新模型或只是放置标志(如" is_member_manager")在我的用户个人资料模型等.

sax*_*sax 0

通常创建一个init使用管理命令命名的应用程序initialize,我将引导应用程序的所有代码放在那里。这允许您:

  • 如果您使用部署工具(我使用 [Ansible](http://www.ansible.com/home,bat 可以是 amy 工具 Fabric、bash...),您可以自动化该过程并init从已安装的应用程序中删除该应用程序配置后(首次安装)

或者

  • 检查命令是否已启动以跳过该过程(Group.objects.all().exists()?)

(或两者)

我发现这个解决方案非常易于维护,并且功能强大,适合任何情况。

post_syncdbpost_migrate在 djang 1.7 中)不是每次迁移所调用的解决方案

如果您只需要加载数据和/或创建记录(即组/管理员...),恕我直言,最好的解决方案是使用数据迁移](https://docs.djangoproject.com/en/1.7/topics/migrations/#数据迁移