Лучший способ объединить пользовательские таблицы двух проектов Django? - PullRequest
4 голосов
/ 04 декабря 2008

У меня есть два проекта Django на одном сервере. Первый запущен несколько месяцев назад, и с тех пор собрал сотни учетных записей пользователей. Второй проект запускается через несколько дней, и мы хотели бы, чтобы второй проект позволил пользователям первого приложения проходить аутентификацию с использованием тех же учетных данных.

Сначала я собирался просто сбросить пользовательскую таблицу из первого проекта во второй проект, но это не позволило бы получить синхронное решение (пользователь создает учетную запись в проекте B, затем не имеет доступа к проекту A) .

Есть ли у Django какой-либо способ естественного переключения имен баз данных (поскольку они находятся на одном сервере) для аутентификации пользователей, а затем обратно в исходную базу данных после завершения аутентификации?

Если нет, как вы думаете, что будет лучшим решением для моей проблемы? Также - мы используем MySQL.

Ответы [ 5 ]

3 голосов
/ 05 декабря 2008

Если вы подождете некоторое время, в конечном итоге Django получит поддержку нескольких баз данных.

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

from django.db import models

def user_post_save(sender, instance, **kwargs):
    ... run script to synchronize tables ...
models.signals.post_save.connect(user_post_save, sender=User)

Вы не сможете использовать ORM ... но выгрузить исходную таблицу, затем удалить место назначения и импортировать в него было бы относительно безболезненно. Это может определенно вызвать проблемы со сроками, но транзакции в основном решат это. Если два сайта сталкиваются друг с другом, я могу рассмотреть возможность установки блокировки записи в таблице User во время обновления и настроить некоторый цикл ожидания при вращении в методе save () модели User (или сигнал pre_save) для проверки блокировки перед завершением сохранения. Это гарантирует, что сигнал post_save не будет отправлен во время синхронизации.

2 голосов
/ 05 декабря 2008

Это, вероятно, меня застрелит; но вы можете создать пользовательскую таблицу нового проекта просто как представление первого проекта:

DROP TABLE proj2.users;
CREATE VIEW proj2.users AS SELECT * FROM proj1.users;
1 голос
/ 20 января 2012

Доступна поддержка нескольких баз данных.

0 голосов
/ 29 декабря 2008

Вы можете использовать приложение multidb для работы со многими дб, как вам нравится.

http://github.com/kron4eg/multidb-django/tree/master

0 голосов
/ 05 декабря 2008

В настоящее время Django не поддерживает несколько баз данных (существует вики-страница на эту тему).

Другой подход заключается в написании пользовательского модуля аутентификации пользователя для второго веб-сайта, который будет выполнять вызовы SQL для базы данных первых веб-сайтов для предоставления имени входа. Когда пользователь с первого сайта входит на второй Django, он создает пользователя на втором сайте. Но это может иметь некоторые проблемы с изменением полного имени и адреса электронной почты, поэтому его можно использовать только для имени пользователя и пароля. Кроме того, ваши пользователи должны будут зарегистрироваться на первом сайте, чтобы получить доступ ко второму, поэтому вам нужно больше настроить регистрацию для регистрации на первом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...