Как установить, что проект 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
Вернуться на верх