推荐学习书目
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 · Jun 26, 2018 · 3295 views
    This topic created in 2879 days ago, the information mentioned may be changed or developed.
    偷个懒,不想为不同使用单位单独部署,升级也方便
    请大佬给个思路
    11 replies    2018-09-05 18:46:55 +08:00
    twor
        1
    twor  
    OP
       Jun 26, 2018
    或者自动部署?
    myyou
        2
    myyou  
       Jun 26, 2018
    django orm 可以用 using 选择不同的数据库,配置好多个数据库,根据 request 的请求域名来选择数据库
    twor
        3
    twor  
    OP
       Jun 26, 2018
    @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  
       Jun 26, 2018   ❤️ 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  
       Jun 26, 2018   ❤️ 1
    @myyou 这样做的话,就不需要用 using 了
    twor
        6
    twor  
    OP
       Jun 26, 2018
    @myyou 送你 36 个赞
    Hyponet
        7
    Hyponet  
       Jun 26, 2018
    这操作风险略高啊
    域名和数据库地址环境变量注入,然后用 docker compose 起,没啥大工作量
    twor
        8
    twor  
    OP
       Jun 26, 2018
    @myyou 细节上略有调整,已部署成功,谢谢!
    @HypoChen docker 还没入门,我现在让它跑起来,至少可行。目前只是 demo 而已,重在业务可行性演示。谢谢你的信息
    georgema1982
        9
    georgema1982  
       Jun 27, 2018   ❤️ 1
    你没看过 django 里自带的 site 框架? https://docs.djangoproject.com/en/2.0/ref/contrib/sites/
    kourim88
        10
    kourim88  
       Sep 5, 2018
    @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
       Sep 5, 2018   ❤️ 1
    @kourim88
    settings.py, 如何设置来获取” db1 "?
    --os.environ.get('DATABASES'))
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5614 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 05:59 · PVG 13:59 · LAX 22:59 · JFK 01:59
    ♥ Do have faith in what you're doing.