我們目前的設置是將Django託管在Google的appengine上,在Google的Cloud SQL上安裝MySQL數據庫。如何允許客戶端在Appengine上使用Django創建動態數據庫和連接作爲多租戶數據庫設置?
用戶(客戶端)通常是我們爲多租戶數據庫結構(每個客戶端有1個數據庫)提供子域的小型企業。
作爲用於確定哪個請求應該打了哪些數據庫中,有一個現有的中間件,其條請求路徑,以獲得子域和由此返回在settings.py
from django.conf import settings
import threading
currentCompanyConnection = threading.local()
class DatabaseMiddleware(object):
def process_request(self, request):
url = request.build_absolute_uri()
if url.find("http://") < 0:
company = url.split("https://")[1].split(".")[0]
else:
company = url.split("http://")[1].split(".")[0]
global currentCompanyConnection
if company in settings.DATABASES:
currentCompanyConnection.company = company
else:
currentCompanyConnection.company = 'default'
request.currentCompany = str(currentCompanyConnection.company)
return None
class DBRouter(object):
def read_and_write(self, model, **hints):
return currentCompanyConnection.company
db_for_read = read_and_write
db_for_write = read_and_write
然而定義的相關數據庫別名,爲了讓我們的Web應用程序具有免費自助服務的功能,必須動態生成新數據庫,併爲註冊的每個用戶動態導入到Django的settings.py中。
最後一部分是我似乎無法弄清楚的,因爲每次更改settings.py時,我都必須再次將它部署到appengine。除此之外,我不知道如何建立與我們的Web應用程序在谷歌的Cloud SQL預先定義的表一個新的數據庫。
感謝您的幫助!我喜歡從解決工作難題,但是這是我根本沒有做過= O
感謝您的意見,我不勝感激!在settings.py中存儲動態數據庫數據可能適合配置django。 – AndyHsiung 2013-04-11 22:10:01