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

时间:2012-10-15 12:12:23

标签: django django-settings django-users django-wsgi

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

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

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

我想要实现的目标是:

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

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

我想这样做是因为:

  • 我想为不同的用户明确使用不同的UserProfile对象
  • 我希望在不同的域之间混合和匹配我的意愿和应用

网站框架上的Django文档似乎对我没有帮助,即使有了这篇以及其他一些文章,我可以看到一些可能性。

我目前的想法是使用wsgi服务器(在我的情况下是uWSGI)实际解决它,我将使用Django的默认wsgi.py,复制它,每个wsgi conf wiill都有自己的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 个答案:

答案 0 :(得分:-1)

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