2

要求:启用Django 应用程序的一个实例来服务多个客户端。对于客户端,我们可以指不应该访问彼此数据的不同域或不同帐户。

客户的估计数量,大约是数百人。

我敢肯定有很多,但我正在寻找一种从长远来看可以最大限度地减少工作量的方法。其中两个可能是:

  1. 一种是使用 Django 中的站点框架和一个数据库,并site_id为大多数模型添加一个(听起来很可怕)
  2. 使用一个数据库进行身份验证和站点模块,并使用多数据库功能将客户特定的模型数据保存在单独的数据库中。这也让我感到害怕,因为我应该为新客户实现动态数据库创建,更糟糕的是,当我升级应用程序时,我不知道如何处理数据库迁移。

你推荐的方法是什么?

4

1 回答 1

0

如果您可以为每个站点使用不同 SITE_ID 的同一应用程序的多个实例,那么这将是首选选项。这样,您可以为每个站点使用不同的数据库,或者可靠地使用 Django 站点框架。

如果您希望单个进程或少数进程为数百个站点提供服务,这是可能的,但是它改变了 Django 的当前设计。使用Site.objects.get_current()依赖于 SITE_ID,因此您必须使用其他东西来确定当前站点。

提供您需要的功能的一个包是django-threaded-multihost,您可以get_current_host根据每个请求使用它来获取不同的站点。

唯一的缺点是任何使用的 Django 应用程序Site.objects.get_current()都需要使用这样的设置进行修改,这使得某些可插入的应用程序难以使用——你要么必须对它们进行修补,要么坚持使用你自己创建的应用程序考虑到线程多主机的使用。

所以,这是可能的,但目前 Django 并没有那么好。

于 2011-03-19T14:37:43.967 回答