我想根据经过身份验证的用户路由(更改)数据库。我查看了docs,但我不知道如何在用户登录时执行此操作...
我正在考虑将database_name
字段添加到我的自定义UserProfile
中,然后我想将此信息传递给数据库路由器,以便进行切换...
我没有要显示的代码,因为我根本不知道如何实现它。
此帖以某种方式与我之前的post相关。
所以架构就像:
- Users (containing only the `UserProfile`)
- user1 (containing the app database)
- user2 (containing the app database)
- ...
你能指出我正确的方向吗?
谢谢! BR
答案 0 :(得分:1)
即使在SaaS应用程序中这是一个典型的请求,多租户通常也有点难以做到,而不会扭曲django。这是一个描述一个approach的链接,在我工作的公司开发的那个有点不同,攻击contrib.sites,但数据库部分非常相似。
简而言之,如果你想要数据库多租户,你将不得不破解Django ConnectionHandler来做你想做的事。
答案 1 :(得分:1)
请参阅this帖子,了解如何使用路由器
DATABASE_ROUTERS = ['CustomDatabaseRouter',] #a setting that Django understands.
class CustomDatabaseRouter(object):
def db_for_read(self, model, **hints):
site_name = get_current_site()
if site_name in ['site1']:
return 'db1'
if site_name in ['site2']:
return 'db2'
return 'default'
def db_for_write(self, model, **hints):
site_name = get_current_site()
if site_name in ['site1']:
return 'db1'
if site_name in ['site2']:
return 'db2'
return 'default'
def allow_syncdb(self, model, **hints):
site_name = get_current_site()
if site_name in ['site1'] and db == 'db1':
return True
if site_name in ['site2'] and db == 'db2':
return True
return False