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

2018-06-26 15:45:54 +08:00
 twor
偷个懒,不想为不同使用单位单独部署,升级也方便
请大佬给个思路
2788 次点击
所在节点    Python
11 条回复
twor
2018-06-26 15:49:36 +08:00
或者自动部署?
myyou
2018-06-26 15:56:31 +08:00
django orm 可以用 using 选择不同的数据库,配置好多个数据库,根据 request 的请求域名来选择数据库
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 这种方式是否可行?

请指教
myyou
2018-06-26 18:40:04 +08:00
@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
2018-06-26 18:49:25 +08:00
@myyou 这样做的话,就不需要用 using 了
twor
2018-06-26 18:51:50 +08:00
@myyou 送你 36 个赞
HypoChen
2018-06-26 19:30:18 +08:00
这操作风险略高啊
域名和数据库地址环境变量注入,然后用 docker compose 起,没啥大工作量
twor
2018-06-26 20:29:08 +08:00
@myyou 细节上略有调整,已部署成功,谢谢!
@HypoChen docker 还没入门,我现在让它跑起来,至少可行。目前只是 demo 而已,重在业务可行性演示。谢谢你的信息
georgema1982
2018-06-27 02:26:52 +08:00
你没看过 django 里自带的 site 框架? https://docs.djangoproject.com/en/2.0/ref/contrib/sites/
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
2018-09-05 18:46:55 +08:00
@kourim88
settings.py, 如何设置来获取” db1 "?
--os.environ.get('DATABASES'))

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/466003

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX