2013-08-27 89 views
1

我正在使用Flask和App Engine實施多租戶應用程序。我使用子域名作爲我的名稱空間(App引擎的名稱空間)。下面是我的設計:使用Flask和App引擎的多租戶應用程序

當用戶訪問test.domain.com,我會檢查子站點的「測試」是否SudDomain模型,如下圖所示:

class SubDomain: # subdomain stored as id 
    pass 

如果「測試」是存在的在SubDomain中,用戶將被重定向到應用程序的登錄頁面,應用程序的當前名稱空間被設置爲'test'。否則,將顯示註冊頁面。

如何在生產環境和開發環境中實現它?我想這樣做如下:

在生產中:

使用before_request裝飾,我會做:

from urllib2 import urlparse 
from flask import request 

url_info = urlparse.urlparse(request.url) # Say, http://test.domain.com 
subdomain = url_info.netloc.split(".")[0] 

此子域可以針對子域模型進行檢查,將按照餘下的步驟。

開發中:

我不知道如何實現這種情況。我在想的是: 請求將採用http://localhost:8888/test/list/的形式,這裏的'test'被視爲子域名。在before_request裝修器中將以何種方式將被刪除,使修改後的請求看起來像http://localhost:8888/list/,這將導致適當的端點。在燒瓶中可以這樣做嗎?

然後,提取的子域 - 'test'將在SubDomain模型中檢查。

我是以正確的方式去做的嗎?我的方法特別是當地的開發環境中有什麼問題嗎?

順便說一句,它是我的第一個多租戶應用程序,請耐心等待。

在此先感謝..

回答

3

我已經做了類似的東西,你在這裏做什麼,但它到底是不是簡單地添加的東西到你的/ etc/hosts文件更多的工作。

我所做的第一次嘗試就像你的一樣,並通過根據環境更改路由器來實現。然後,反向路由創建器很容易創建它,但隨着它的增長,您必須支持兩次dev/live的路由,這很容易做到,但不值得麻煩。

所以,只要修改你的主機文件添加你想測試的域名。

# on Linux/Unix at /etc/hosts 
127.0.0.1 www.example.dev sub1.example.dev sub2.example.dev 

# on windows its in system32\drivers\etc\ 

如果你使用Linux/MAC您還可以安裝的dnsmasq在那裏你可以簡單地定義爲你的開發工作的整體擴展。例如,我的一切.dev都指向本地主機,例如www.example.dev

這樣,您只需在.com - > .dev的生產和開發中爲您的域路由創建一個變量。

然後就可以開始在http://www.example.dev:8888/

+0

感謝您的建議訪問您的AppEngine開發服務器。我的本地開發環境的方法很複雜,我不能說它的工作原理。所以,我最終在本地dev的情況下在設置中添加了'subdomain'名稱,也會嘗試你的方法。 dnsmasq看起來像一個方便的工具。 – rajpy