我想构建一个 Django 应用程序,其中每个“用户集”可以看到不同的数据,因为他们使用不同的数据库。有没有最佳实践来实现这一目标?
例如,用户A在登录后可以看到和管理自己的数据,而无法看到其他人的数据。
我可以使用 Django 多数据库功能来定义多个数据库并创建一个自动路由器以根据当前请求的用户指向正确的数据库(将 auth_user 保存在一个公共数据库上)。
最后一次机会,我可以为每个组创建一个不同的应用程序文件夹(唯一的区别是数据库名称),但我更喜欢更智能的解决方案。
我想构建一个 Django 应用程序,其中每个“用户集”可以看到不同的数据,因为他们使用不同的数据库。有没有最佳实践来实现这一目标?
例如,用户A在登录后可以看到和管理自己的数据,而无法看到其他人的数据。
我可以使用 Django 多数据库功能来定义多个数据库并创建一个自动路由器以根据当前请求的用户指向正确的数据库(将 auth_user 保存在一个公共数据库上)。
最后一次机会,我可以为每个组创建一个不同的应用程序文件夹(唯一的区别是数据库名称),但我更喜欢更智能的解决方案。
您可以考虑重用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 有本机支持而无需 hack。但是,如果无论如何您要在组中拥有每个对象的权限,那么您最好直接采用第一个解决方案。