如何使用唯一设置设置django.按SITE_ID



我一直在研究在一个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实例中解决这个问题的内存的两倍。

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

据我所知,settings.py对于每个django项目都是唯一的,SITE_ID就是在这个级别定义的。IMHO最好的方法是使用许多带有数据库路由器的django项目。在每个项目中,您都可以定义SITE_ID,以便与django-sites框架一起使用。https://docs.djangoproject.com/en/dev/topics/db/multi-db/#database-路由器

相关内容

最新更新