Джанго и Саас. Как использовать отдельную базу данных для каждого сайта Django? - PullRequest
2 голосов
/ 29 февраля 2012

Я создаю проект SaaS с Django. Я решил использовать django-saas-kit для пользовательских подписок и части с несколькими учетными записями.

В идеале я хотел бы иметь возможность создать новый сайт для каждого пользователя и отдельную базу данных. Каркас сайтов поддерживает это? Как это можно реализовать?

Спасибо.

1 Ответ

4 голосов
/ 29 февраля 2012

Вы должны создать папку "клиенты" и подкаталог для каждого клиента.В каждом подкаталоге создайте файл 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

Не забывайте, что каждому клиенту потребуется иметь свой дополнительный материал.Например, если вы используете стог сена с 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
...