在Django中使用自己的数据库处理多个客户

时间:2011-09-09 19:53:13

标签: database django

我必须开发一个Django webapp,它可以使用自己的数据库处理多个客户。

每位客户都应管理不同的用户和群组,以及相关的权限和一组Django应用。

出于安全性和扩展原因,我需要单独的数据库。而且,每个基本大小可能超过200MB。除了这些专用数据库,我需要一个“通用”数据库来存储每个客户共有的数据(不得复制到每个客户数据库)。

事实是我不知道如何处理多个客户数据库(并且为每个客户独立保留Django的auth功能:用户/组/烫发)。

我发现django-constance(https://github.com/comoga/django-constance)允许动态更改设置,我想记住使用客户标识符+用户名进行身份验证;通过这种方式,我可以使用客户标识符加载正确的数据库,并使用用户名加载该标识符。

嗯,这个解决方案在我看来并不是那么好,如果有人有更好的想法,或者有人已经遇到这个问题并找到了解决办法,我将不胜感激......

我在网上没有发现类似的问题,而且这很烦人,因为在我看来这并不是特别的......

非常感谢花在这上面的时间。

1 个答案:

答案 0 :(得分:0)

保持简单 - 利用Apache(或nginx或其他)为您提供的功能。

  1. 使用mod_wsgi。

  2. 使用Apache(或nginx或其他)将客户的URL彼此分开

    /cust1/path/to/resource
    /cust2/path/to/resource
    

    如果您使用Apache(或nginx或其他)来分解这些内容,那么每个顶级路径元素都可以将请求定向到特定的mod_wsgi实例

  3. 每个mod_wsgi实例都有自己的settings.py,其中包含客户的特定数据库凭据。

  4. 每位客户settings.py应该以{{1​​}}开头,以便您可以为每位特定客户提供“为所有客户”设置。