【问题标题】:Django and SaaS. How to use separate database for each Django site?Django 和 SaaS。如何为每个 Django 站点使用单独的数据库?
【发布时间】:2012-03-18 23:58:52
【问题描述】:

我正在使用 Django 创建一个 SaaS 项目。 我决定将django-saas-kit 用于用户订阅和多帐户部分。

理想情况下,我希望能够为每个用户创建一个新站点和一个单独的数据库。 站点框架是否支持这一点?如何实现?

谢谢。

【问题讨论】:

    标签: python django saas


    【解决方案1】:

    您应该创建一个“clients”文件夹,并为每个客户端创建一个子目录。在每个子目录中,创建一个 site_settings.py 文件,如下所示:

    import os.path
    
    # import global settings
    from settings import *
    
    # this is barely just the name of the client dir, you might want to use that
    SITE_NAME = __file__.split('/')[-2]
    # this is the directory of the client website
    CLIENT_ROOT = os.path.abspath(os.path.dirname(__file__))
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.contrib.gis.db.backends.postgis',
            'NAME': SITE_NAME,
            'USER': SITE_NAME,
            'PASSWORD': 'some random password',
        }  
    }
    
    # you might want this too so that each client have his own MEDIA_ROOT
    MEDIA_ROOT = os.path.join(CLIENT_ROOT, 'upload')
    

    然后不要忘记将 --settings 开关用于管理命令。例如:

    ./manage.py syncdb --settings=clients.demo.site_settings
    

    不要忘记每个客户都需要拥有自己的额外物品。例如,如果您将 haystack 与 whoosh 一起使用,则需要添加它,以免在客户端之间混淆:

    HAYSTACK_WHOOSH_PATH = os.path.join(CLIENT_ROOT, 'whoosh')
    

    或者使用 django-zstask:

    ZTASKD_URL = 'ipc:///tmp/%s_ztask.sock' % SITE_NAME
    

    或者使用 JohnnyCache:

    JOHNNY_MIDDLEWARE_KEY_PREFIX=SITE_NAME
    

    【讨论】:

    • 非常感谢您的回答:)。我也有关于后台任务的问题,您提供了使用 ztaskd 的答案。我现在正在使用芹菜。有解决方案吗?另外请告诉我你更喜欢 celery 还是 ztaskd?
    • 如果使用 djkombu 进行传输,则消息会通过数据库传递,并且不会发生冲突。但我不太了解芹菜...
    • 我没有回答:首先我尝试了芹菜,效果很好。但后来我尝试了 django-ztask,它对于基本需求几乎相同,只是它更简单 - 特别是它安装得更快并且需要更少的照顾。
    • 我终于要试试 django-ztask 了。目前我面临的问题是它只能看到全局 settings.py,它对客户端设置文件一无所知。 ZTASKD_URL 默认为 tcp://127.0.0.1:5555/ 而不是 ipc 链接。我按照 github 上的 README 进行安装。我错过了什么?
    • 你好像错过了--settings,也许你可以再问一个更详细的问题?
    猜你喜欢
    • 2012-09-03
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多