我正在使用 Flask 和 App Engine 实现多租户应用程序。我使用子域作为我的命名空间(应用引擎的命名空间)。下面是我的设计:
当用户访问 test.domain.com 时,我会检查子域 'test' 是否在 SudDomain 模型中,如下图所示:
class SubDomain: # subdomain stored as id
pass
如果子域中有'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/
,这里的“测试”被视为子域。装饰器中的哪个before_request
将被删除,以便修改后的请求看起来像这样http://localhost:8888/list/
,这将导致正确的端点。在烧瓶中可以这样做吗?
然后,提取的子域 - 'test' 将在 SubDomain 模型中进行检查。
我是否以正确的方式做这件事?我的方法有问题吗,尤其是本地开发环境中的方法?
顺便说一句,这是我的第一个多租户应用程序,请多多包涵。
提前致谢..