2008-12-04 78 views
4

我在同一台服务器上有两个Django项目。几个月前首次推出,并已收集数百个用户帐户。第二个项目将在几天内启动,我们希望第二个项目允许第一个应用的用户使用相同的凭据进行身份验证。合并两个Django项目用户表的最佳方式是什么?

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

Django是否有一些本地切换数据库名称(因为它们在同一台服务器上)的方式进行用户身份验证,然后在完成身份验证后返回到原始数据库?

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

+0

Hrm。所以下面的选项是“否”,“MAYBE”和“等待”。不放心。 – 2008-12-04 23:39:29

回答

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 ......但反倾销源表,然后滴加目的地和进口到这将是相对简单的。这肯定会造成计时问题,但交易将主要解决这个问题。如果两个站点彼此相互关注,我可能会考虑在更新期间在用户表上设置写锁定,并在用户模型的save()方法(或方法)上设置某种类型的旋转等待周期pre_save信号)在完成保存之前检查锁。这可以保证在同步过程中post_save信号不会被发送。

0

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

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

+0

我确信有可能说服django.auth使用数据库A进行一些黑客攻击,但是数据库B将无法使用ORM为DB A的用户表提供外键(这是一个相当常见的要求)。 – 2008-12-04 21:52:50

2

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

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

将不会工作,因为唯一ID列中的冲突 – hop 2008-12-05 01:21:58

+1

为什么?如果表中有一个auto_increment,应该保存在proj1表中,因此没有冲突 – eliego 2008-12-06 16:47:25

1

多数据库支持现已推出。

相关问题