我必须开发一个Django webapp,它可以使用自己的数据库处理多个客户。
每位客户都应管理不同的用户和群组,以及相关的权限和一组Django应用。
出于安全性和扩展原因,我需要单独的数据库。而且,每个基本大小可能超过200MB。除了这些专用数据库,我需要一个“通用”数据库来存储每个客户共有的数据(不得复制到每个客户数据库)。
事实是我不知道如何处理多个客户数据库(并且为每个客户独立保留Django的auth功能:用户/组/烫发)。
我发现django-constance(https://github.com/comoga/django-constance)允许动态更改设置,我想记住使用客户标识符+用户名进行身份验证;通过这种方式,我可以使用客户标识符加载正确的数据库,并使用用户名加载该标识符。
嗯,这个解决方案在我看来并不是那么好,如果有人有更好的想法,或者有人已经遇到这个问题并找到了解决办法,我将不胜感激......
我在网上没有发现类似的问题,而且这很烦人,因为在我看来这并不是特别的......
非常感谢花在这上面的时间。
答案 0 :(得分:0)
保持简单 - 利用Apache(或nginx或其他)为您提供的功能。
使用mod_wsgi。
使用Apache(或nginx或其他)将客户的URL彼此分开
/cust1/path/to/resource
/cust2/path/to/resource
如果您使用Apache(或nginx或其他)来分解这些内容,那么每个顶级路径元素都可以将请求定向到特定的mod_wsgi实例
每个mod_wsgi实例都有自己的settings.py
,其中包含客户的特定数据库凭据。
每位客户settings.py
应该以{{1}}开头,以便您可以为每位特定客户提供“为所有客户”设置。