2012-04-18 3 views
0

Я хочу создать приложение Django, в котором каждый «набор пользователей» может видеть разные данные, поскольку они используют разные БД. Есть ли наилучшая практика для достижения этой цели?Django: подсказка для выделения данных среди множества пользователей

E.g. пользователь A после регистрации регистрирует и управляет своими данными, без возможности видеть данные других пользователей.

Я мог бы использовать функцию multi-db Django для определения нескольких dbs и создать automatic router, чтобы указать на правильный db в соответствии с пользователем текущего запроса (сохраняя auth_user на общем db).

Как последний шанс, я могу создать другую папку приложений для каждой группы (единственное отличие - имя базы данных), но я предпочитаю более разумное решение.

+0

В чем вопрос? Какие данные? Используете ли вы django.auth для управления пользователями? У вас есть профили пользователей? Используете ли вы группы django.auth? Это слишком неопределенный вопрос, который должен отвечать. –

ответ

1

Вы можете рассмотреть возможность повторного использования одного из many per-object permission apps for django.

Другая возможность заключается в создании разных файлов настроек. Например, settings_groupA.py:

from settings import * 
DATABASES = ... 

И тогда вы можете использовать команды управления, как SyncDB или runserver, и т.д., и т.д ... с опцией --settings:

--settings=SETTINGS The Python path to a settings module, e.g. 
         "myproject.settings.main". If this isn't provided, the 
         DJANGO_SETTINGS_MODULE environment variable will be 
         used. 

Примеры:

./manage.py syncdb --settings=settings_groupA 
./manage.py runserver --settings=settings_groupA 

преимущество использования баз данных в одном наборе пользователей является то, что вы можете сохранить ваш код проще и позволить им иметь встроенную поддержку django.contrib.admin, без хака. Но тогда, если вы все равно будете иметь разрешения на объекты в группе, тогда вы можете пойти прямо на первое решение.

+0

Я нахожусь в основе использования нескольких баз данных через автоматический маршрутизатор баз данных, который переключает db в соответствии с пользователем. Вы думаете, что это хорошая идея? (Я вставляю это в вопрос) – Don

+1

Возможно, если вы запросите базу данных пользователей, вы можете переключить курсор подключения для запроса в другую базу данных. Но это потребует гораздо большей осторожности, чем просто использование одного экземпляра django для каждой базы данных, поэтому я бы окончательно подумал дважды, прежде чем двигаться в этом направлении. – jpic