Как установить, что проект django может заходить на страницу входа в систему управления администратором с нескольких адресов
Как настроить проект django для входа на страницу входа в админку с нескольких адресов, я хочу использовать разные базы данных в соответствии с разными адресами
Но, похоже, это не работает. Когда я захожу на страницу входа admin1-3, он сбрасывается на adminСнимок экрана входа
Даже если я верну в базе данных суждение о маршрутизации, все равно будут ошибки при входе в системуГде находится кодСнимок экрана ошибки
Не ошибается ли моя идея? Не могли бы вы дать мне совет, большое спасибо.
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'admin',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': 3306
},
'adminx1': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'adminx1',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': 3306
},
'adminx2': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'adminx2',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': 3306
},
'adminx3': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'adminx3',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': 3306
}
}
urls.py
urlpatterns = [
path('app_test/', include('apps.app_test.urls')),
path('admin/', admin.site.urls),
path('admin1/', admin.site.urls),
path('admin2/', admin.site.urls),
path('admin3/', admin.site.urls),
]
middleware.py
import threading
from django.conf import settings
request_cfg = threading.local()
class AppTestMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
request_cfg.request = request
response = self.get_response(request)
if hasattr(request_cfg, 'request'):
del request_cfg.request
# Code to be executed for each request/response after
# the view is called.
return response
class AuthRouter:
"""
A router to control all database operations on models in the
auth and contenttypes applications.
"""
route_app_labels = {}
def _default_db(self):
if hasattr(request_cfg, 'request'):
try:
database_path_name = request_cfg.request.path.split('/')[1]
except IndexError:
return 'default'
if request_cfg.request.GET.get('next') == '/admin1/':
return 'admin1'
database = settings.DATABASES.get(database_path_name)
return database and database['NAME']
return None
def db_for_read(self, model, **hints):
"""
Attempts to read auth and contenttypes models go to auth_db.
"""
default_db = self._default_db()
if default_db:
return default_db
if model._meta.app_label in self.route_app_labels:
return 'default'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write auth and contenttypes models go to auth_db.
"""
default_db = self._default_db()
if default_db:
return default_db
if model._meta.app_label in self.route_app_labels:
return 'default'
return None