广告区

广告区


本站消息

站长简介/公众号

关注本站官方公众号:程序员总部,领取三大福利!
福利一:python和前端辅导
福利二:进程序员交流微信群,专属于程序员的圈子
福利三:领取全套零基础视频教程(python,java,前端,php)

  价值13000svip视频教程,python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何设置django项目可以从多个url进入admin管理登录页面

发布于2022-05-18 03:20     阅读(1057)     评论(0)     点赞(26)     收藏(4)



如何设置django项目可以从多个url进入admin管理登录页面,我想根据不同的url使用不同的数据库

但这似乎不起作用。当我访问admin1-3的登录页面时,他将被重置为admin 登录截图

即使我在数据库路由判断中返回,在代码所在的地方登录还是会报错

错误截图 错误截图

我的想法错了吗?能否给点建议,非常感谢。

设置.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
    }
}

网址.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),
]

中间件.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

解决方案


暂无回答







所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1523235/b704de9423187746cd99/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

26 0
收藏该文
已收藏

评论内容:(最多支持255个字符)