3

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

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

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

我想要实现的是:

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

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

我想这样做是因为:

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

Sites 框架上的 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 实例中解决这个问题的内存将是两倍。

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

4

1 回答 1

-1

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

于 2012-10-16T20:12:41.560 回答