我一直在研究在单个 Django 框架下拥有多个站点的各种(并且有很多)方法。
我仍然没有找到适合我的用例的解决方案。用例是:
- 单个数据库,因为大部分数据 (95%+) 将在两个数据库之间共享 应用
- 两种不同的用户类型,每个用户都通过不同的域登录, 并且实际上以不同的方式与相同的原始数据进行交互
我想实现的是:
当访问者访问 example.com 时,SITE_ID = 1 的设置生效。
当访问者访问 training.example.com 时,SITE_ID = 2 的设置生效。
我想这样做是因为:
- 我想为不同的用户使用明确不同的 UserProfile 对象
- 我想在不同域之间随意混合和匹配 View 和应用
站点框架上的 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 实例中解决这个问题的两倍内存。
对于我需要实现的目标有更好的实现吗?
最佳答案
据我所知,settings.py 对于每个 django 项目都是唯一的,并且 SITE_ID 是在这个级别定义的。恕我直言,最好的方法是使用许多带有数据库路由器的 django 项目。在每个项目中,您可以定义 SITE_ID 以与 django 站点框架一起使用。 https://docs.djangoproject.com/en/dev/topics/db/multi-db/#database-routers
关于django - 如何使用每个 SITE_ID 的唯一 settings.py 设置 django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12895417/