簡體   English   中英

使用Flask和App引擎的多租戶應用程序

[英]Multi-tenancy App using Flask and App engine

我正在使用Flask和App Engine實現Multi-tenancy app。 我正在使用子域作為我的命名空間(App引擎的命名空間)。 以下是我的設計:

當用戶訪問test.domain.com時,我將檢查子域'test'是否在SudDomain模型中,如下所示:

class SubDomain: # subdomain stored as id
    pass 

如果SubDomain中存在'test',則用戶將被重定向到應用程序的登錄頁面,並且應用程序的當前名稱空間將設置為'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]

可以針對SubDomain模型檢查此子域,並將遵循其余步驟。

開發中:

我不知道如何實現這種情況。 我的想法是:請求將采用http://localhost:8888/test/list/ ,這里'test'被視為子域。 以某種方式在before_request裝飾器中將被刪除,以便修改后的請求看起來像http://localhost:8888/list/ ,這將導致正確的端點。 在燒瓶中可以這樣做嗎?

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

我是以正確的方式做到的嗎? 我的方法中有什么問題,尤其是本地開發環境中的問題嗎?

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

提前致謝..

我已經做了類似於你在這里所做的事情,但最終只是簡單地將東西添加到你的/ 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這樣的localhost

通過這種方式,您只需在生產和開發中為.com - > .dev創建域路由變量。

然后,您可以在http://www.example.dev:8888/開始訪問appengine dev服務器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM