I'm using two same structure database in Django:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database1',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '3306'
},
'db_1402': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database2',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '3306'
}
}
and user select a database in login page. I want to use user selected database in whole project and all Models read and write in user selected database.
I try to use database router but user logout automatically. I define bellow decorator to save database name in connections['default'].alias and pass it to database router:
from django.db import connections
def db_login_required(login_url):
def decorator(view):
def wrapper_func(request, *args, **kwargs):
if not request.user.is_authenticated:
next_url = request.get_full_path()
return redirect(f'{reverse(login_url)}?{urlencode({"next": next_url})}')
connections['default'].alias = request.session.get('database', 'default')
return view(request, *args, **kwargs)
return wrapper_func
return decorator
and then I create a database router like this:
class SessionDatabaseRouter(object):
def db_for_read(self, model, **hints):
return connections['default'].alias
def db_for_write(self, model, **hints):
return connections['default'].alias
def allow_relation(self, obj1, obj2, **hints):
return True
def allow_migrate(self, db, app_label, model_name=None, **hints):
return True
but after login suddenly user logout automatically. How can fix this?