V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
twor
V2EX  ›  Python

同一 Django 实例,不同域名进来可以使用不同的数据库吗?

  •  
  •   twor · 2018-06-26 15:45:54 +08:00 · 2879 次点击
    这是一个创建于 2346 天前的主题,其中的信息可能已经有所发展或是发生改变。
    偷个懒,不想为不同使用单位单独部署,升级也方便
    请大佬给个思路
    11 条回复    2018-09-05 18:46:55 +08:00
    twor
        1
    twor  
    OP
       2018-06-26 15:49:36 +08:00
    或者自动部署?
    myyou
        2
    myyou  
       2018-06-26 15:56:31 +08:00
    django orm 可以用 using 选择不同的数据库,配置好多个数据库,根据 request 的请求域名来选择数据库
    twor
        3
    twor  
    OP
       2018-06-26 18:17:22 +08:00
    @myyou
    谢谢提供的思路
    https://docs.djangoproject.com/en/2.0/topics/db/multi-db/
    我现在知道,在 settings.py 可以提供多个 database 的配置, 在使用中可以 通过 using 来选择切换

    现在的配置是 NGINX - uWSGI - Django
    不同的实例,用不同的可访问域名和 wsgi.py 。在 wsgi.py 定义 database 的变量(比如 db='firstdb'),在后面的 admin.py 或者其他 orm 里面用 using = db 来实现不同的数据库套账

    可我不知掉如何访问到 wsgi 里面这个变量 db,或者 using = db 这种方式是否可行?

    请指教
    myyou
        4
    myyou  
       2018-06-26 18:40:04 +08:00   ❤️ 1
    @twor 既然有不同个 wsgi.py
    wsgi.py 有这个 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
    你也可以加一个 os.environ.setdefault("DATABASES", "db1")
    然后在 settings.py, 使用 os.environ 获取” db1 “
    最后 DATABASES = {"default": MULT_DATABASES["db1"]}
    其中 MULT_DATABASES = {” db1 “:{···},” db2 “:{···}}
    myyou
        5
    myyou  
       2018-06-26 18:49:25 +08:00   ❤️ 1
    @myyou 这样做的话,就不需要用 using 了
    twor
        6
    twor  
    OP
       2018-06-26 18:51:50 +08:00
    @myyou 送你 36 个赞
    HypoChen
        7
    HypoChen  
       2018-06-26 19:30:18 +08:00
    这操作风险略高啊
    域名和数据库地址环境变量注入,然后用 docker compose 起,没啥大工作量
    twor
        8
    twor  
    OP
       2018-06-26 20:29:08 +08:00
    @myyou 细节上略有调整,已部署成功,谢谢!
    @HypoChen docker 还没入门,我现在让它跑起来,至少可行。目前只是 demo 而已,重在业务可行性演示。谢谢你的信息
    georgema1982
        9
    georgema1982  
       2018-06-27 02:26:52 +08:00   ❤️ 1
    你没看过 django 里自带的 site 框架? https://docs.djangoproject.com/en/2.0/ref/contrib/sites/
    kourim88
        10
    kourim88  
       2018-09-05 17:22:26 +08:00
    @twor 你好,终于看到跟我同样问题。一直困扰。看你上面的答案还是我还是不太明白,
    wsgi.py 里设置 os.environ.setdefault("DATABASES", "db1")
    然后在 settings.py, 如何设置来获取” db1 “呢。
    settings.py 里设置 DATABASES = {"default": MULT_DATABASES["db1"]}
    其中 MULT_DATABASES = {” db1 “:{···},” db2 “:{···}}.
    如何根据用户的 ip 或者用户名或者请求的 url 来自动切换切换 db 呢。apps 里面的内容都是相同的(通用的)。想把数据库分开。
    楼主能分享详细点吗?感激不尽。
    twor
        11
    twor  
    OP
       2018-09-05 18:46:55 +08:00   ❤️ 1
    @kourim88
    settings.py, 如何设置来获取” db1 "?
    --os.environ.get('DATABASES'))
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1072 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:31 · PVG 03:31 · LAX 11:31 · JFK 14:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.