2008-12-04 79 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

多數據庫支持現已推出。

相關問題