Django在多个项目之间共享相同用户模型和数据库的最佳方法

时间:2018-12-12 15:44:17

标签: django django-models django-project-architect

我有多个Django项目。每个人都有自己安装的应用程序。他们没有安装相同的应用程序。

他们之间的共同点是,他们应该使用并共享相同的“自定义用户”模型和数据库。

哪个是完成此任务的正确方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个非常棘手的问题,除非您确切地指定一个项目作为自定义用户模型的“主”。否则,您可能会对同一个数据库表进行竞争性迁移。一旦确定哪个项目将成为主项目,则非主项目应该在DATABASES中具有一个单独的条目,该条目会将它们连接到中央用户数据库


DATABASES = {
    'default': ...
    'users': {
        'HOST': 'central-host.example.com',
        'NAME': 'central-users',
        ... 
    }
}
DATABASE_ROUTERS = 'my_app.database_router'

在路由器中,您可以指定应从中央用户数据库中读取用户模型:


class Router(object):
    def db_for_read(self, model, **hints):
        if model.__name__ == 'CustomUserModel':
            return 'users'
        return 'default'

    def db_for_write(self, model, **hints):
        if model.__name__ == 'CustomUserModel':
            return 'users'
        return 'default'