首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
Coding
V2EX  ›  Python

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

  •  
  •   twor · 2018-06-26 15:45:54 +08:00 · 1846 次点击
    这是一个创建于 535 天前的主题,其中的信息可能已经有所发展或是发生改变。
    偷个懒,不想为不同使用单位单独部署,升级也方便
    请大佬给个思路
    11 回复  |  直到 2018-09-05 18:46:55 +08:00
        1
    twor   2018-06-26 15:49:36 +08:00
    或者自动部署?
        2
    myyou   2018-06-26 15:56:31 +08:00
    django orm 可以用 using 选择不同的数据库,配置好多个数据库,根据 request 的请求域名来选择数据库
        3
    twor   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 这种方式是否可行?

    请指教
        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 “:{···}}
        5
    myyou   2018-06-26 18:49:25 +08:00   ♥ 1
    @myyou 这样做的话,就不需要用 using 了
        6
    twor   2018-06-26 18:51:50 +08:00
    @myyou 送你 36 个赞
        7
    HypoChen   2018-06-26 19:30:18 +08:00
    这操作风险略高啊
    域名和数据库地址环境变量注入,然后用 docker compose 起,没啥大工作量
        8
    twor   2018-06-26 20:29:08 +08:00
    @myyou 细节上略有调整,已部署成功,谢谢!
    @HypoChen docker 还没入门,我现在让它跑起来,至少可行。目前只是 demo 而已,重在业务可行性演示。谢谢你的信息
        9
    georgema1982   2018-06-27 02:26:52 +08:00   ♥ 1
    你没看过 django 里自带的 site 框架? https://docs.djangoproject.com/en/2.0/ref/contrib/sites/
        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 里面的内容都是相同的(通用的)。想把数据库分开。
    楼主能分享详细点吗?感激不尽。
        11
    twor   2018-09-05 18:46:55 +08:00   ♥ 1
    @kourim88
    settings.py, 如何设置来获取” db1 "?
    --os.environ.get('DATABASES'))
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4183 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 09:03 · PVG 17:03 · LAX 01:03 · JFK 04:03
    ♥ Do have faith in what you're doing.