我正在使用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模型中檢查。
我是以正確的方式去做的嗎?我的方法特別是當地的開發環境中有什麼問題嗎?
順便說一句,它是我的第一個多租戶應用程序,請耐心等待。
在此先感謝..
感謝您的建議訪問您的AppEngine開發服務器。我的本地開發環境的方法很複雜,我不能說它的工作原理。所以,我最終在本地dev的情況下在設置中添加了'subdomain'名稱,也會嘗試你的方法。 dnsmasq看起來像一個方便的工具。 – rajpy