合并两个Django项目的用户表的最佳方法是什么?

时间:2008-12-04 20:32:17

标签: mysql django

我在同一台服务器上有两个Django项目。第一个在几个月前推出,并且已经收集了数百个用户帐户。第二个项目将在几天内启动,我们希望第二个项目允许第一个应用程序的用户使用相同的凭据进行身份验证。

首先,我将简单地将用户表从第一个项目转储到第二个项目,但这不允许同步解决方案(用户在项目B上创建帐户,然后无法访问项目A)

Django是否可以通过某种方式本地切换数据库名称(因为它们位于同一服务器上)以进行用户身份验证,然后在完成身份验证后返回原始数据库?

如果没有,您认为对我的问题最好的解决方案是什么?另外 - 我们正在使用MySQL。

5 个答案:

答案 0 :(得分:3)

如果你等一会儿,最终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表上设置一个写锁定,并在User模型的save()方法上设置某种旋转等待周期(或者pre_save信号)在完成保存之前检查锁定。这样可以保证在同步过程中不会发送post_save信号。

答案 1 :(得分:2)

这可能会让我开枪; 您可以创建新项目的用户表,只是作为第一个项目的视图:

DROP TABLE proj2.users;
CREATE VIEW proj2.users AS SELECT * FROM proj1.users;

答案 2 :(得分:1)

现在提供多种数据库支持。

答案 3 :(得分:0)

Django目前不支持多个数据库(关于该主题有一个wikipage。)

另一种方法是为第二个网站编写一个自定义user authentication模块,该模块将对第一个网站数据库进行SQL调用以提供登录。当第一个站点的用户登录到第二个Django时,将在第二个站点中创建一个用户。但是这可能会在更改全名和电子邮件地址方面遇到一些问题,因此它只能用于拥有用户名和密码。此外,您的用户必须在第一个站点上注册才能访问第二个站点,因此您需要更多自定义注册才能在第一个站点注册。

答案 4 :(得分:0)

您可以使用multidb应用程序根据需要使用多个数据库

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