我想创建一个包含多个数据库的Django应用程序。每个客户一个数据库。每个客户都有自己的用户现在我可以看到这很容易设置:
我定义了一个中间件来查看url并设置thread.local变量:
my_local_global = local()
class AccountDatabaseMiddleware(object):
def process_request(self, request):
database_name = self.get_database_name_from_request(request)
my_local_global.database_name = database_name
def get_database_name_from_request(self, request):
hostname = remove_www(request.get_host().split(':')[0])
if hostname == '127.0.0.1':
return 'default'
database_name = hostname.split('.')[0]
return database_name
和指向给定db的路由器:
class PartitionRouter(object):
def db_for_write(self, model, **hints):
from myapp.middleware import my_local_global
try:
return my_local_global.database_name
except AttributeError:
return 'default'
def db_for_read(self, model, **hints):
from babeldat.middleware import my_local_global
try:
return my_local_global.database_name
except AttributeError:
return 'default'
我的问题实际上是以下,是那么简单吗?或者我错过了什么,这不是要走的路,我会遇到各种各样的问题(比如每个拥有django_sessions表的数据库,以及django_contenttypes等)......