如何使用每个 SITE_ID 的唯一 settings.py 设置 django

Posted

技术标签:

【中文标题】如何使用每个 SITE_ID 的唯一 settings.py 设置 django【英文标题】:How to setup django with unique settings.py per SITE_ID 【发布时间】:2012-10-05 09:57:15 【问题描述】:

我一直在研究在单个 Django 框架下拥有多个站点的各种(并且有很多)方法。

我仍然没有找到适合我用例的解决方案。用例是:

单个数据库,因为大部分数据 (95%+) 将在两个数据库之间共享 应用程序 两种不同的用户类型,分别通过不同的域登录, 并且实际上与相同的原始数据进行不同的交互

我想要实现的是:

当访问者访问 example.com 时,SITE_ID = 1 的设置生效。

当访问者访问 training.example.com 时,SITE_ID = 2 的设置生效。

我想这样做是因为:

我想为不同的用户使用不同的 UserProfile 对象 我想在不同域之间随意混合和匹配视图和应用程序

站点框架上的 Django 文档似乎对我没有帮助,尽管有这篇文章和其他一些文章,我可以看到一些可能性。

我目前的想法是使用 wsgi 服务器(在我的例子中为 uWSGI)来实际解决它,我将在其中获取 Django 的默认 wsgi.py,复制它,每个 wsgi conf 都会有自己的 Django settings.py。

那么服务器实际上将为两个不同的 wsgi 应用程序提供服务,即使它们使用许多相同的代码。

因此,在这种情况下,我的 Django 项目将具有:

example.com.settings.py (SITE_ID = 1) training.example.com.settings.py (SITE_ID = 2) example.com.wsgi.py(使用 example.com.settings.py) training.example.com.wsgi.py(使用 training.example.com.settings.py)

我的场景应该可以工作,但是在同一个 Django 实例中解决这个问题的内存将是两倍。

对于我需要实现的目标有什么更好的实现吗?

【问题讨论】:

【参考方案1】:

据我所知,settings.py 对于每个 django 项目都是唯一的,并且 SITE_ID 是在此级别定义的。恕我直言,最好的方法是将许多 django 项目与数据库路由器一起使用。在每个项目中,您可以定义 SITE_ID 以与 django 站点框架一起使用。 https://docs.djangoproject.com/en/dev/topics/db/multi-db/#database-routers

【讨论】:

设置在项目范围内,而不是应用范围内。 我的错。一直意味着项目

以上是关于如何使用每个 SITE_ID 的唯一 settings.py 设置 django的主要内容,如果未能解决你的问题,请参考以下文章

如何在由“站点”框架提供支持的多个 Django 站点中获取唯一用户?

在 Django Admin 中查找站点的 site_id

mysql 批量修改 字段 值

Django-cms:“设置”对象没有属性“SITE_ID”

PHP - 当给定子键名时,递归地将每个数组元素的键设置为子元素的值

如何使用 SQL 选择每个唯一日期的唯一会话?