Djangoは
ドキュメントを読んだら、Djangoで独自のカスタム「ルーター」クラスを提供して、特定のクエリに使用するデータベースを決定できることがわかります。
https://docs.djangoproject.com/en/1.6/topics/db/multi-db/# using-routers
「フロントエンド」でどのデータベースを選択したいかを言うので、おそらくあなたのサイトの各ユーザーは異なるデータベースバックエンドを選択することができます。 dbルーターは現在のhttpリクエストとユーザーについて何も知らないため、これには問題があります。
この「ThreadLocal」ミドルウェアを使用して現在のリクエストオブジェクトを保存し、カスタムルーターからアクセスできるようにすることをお勧めします:
https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py
ユーザーが選択したバックエンドをrequest.session['db_name']
として -ルーターは次のようになります:
from django_tools.middlewares import ThreadLocal
class RequestRouter(object):
def db_for_read(self, model, **hints):
request = ThreadLocal.get_current_request()
return request.session.get('db_name', 'default')
def db_for_write(self, model, **hints):
request = ThreadLocal.get_current_request()
return request.session.get('db_name', 'default')
def allow_relation(self, obj1, obj2, **hints):
return True
def allow_syncdb(self, db, model):
return True