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

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

我一直在研究在单个 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/

相关文章:

django - 如何在Django中维护一对多关系的插入顺序

python - 部署到 EC2 后,Django TemplateDoesNotExist at/debug_toolbar/base.html

django 使用 heroku 设置变量 SECURE_PROXY_SSL_HEADER

python - 没有名为 registration.backends.default.urls 的模块

python - 如何为django项目制作类图?

Django ALLOWED_HOSTS IP 范围

python - django 1.9 不为自定义用户模型创建表

python - 创建无法登录的django用户

python - Django 扩展 model.User

python - 将日期时间从 Objective C 传递到 Django