Flask:针对不同子域的不同数据库后端?

时间:2016-04-15 07:32:17

标签: flask flask-sqlalchemy

我的应用程序迎合了使用子域的多个客户,并为每个客户使用通用数据库进行基础架构管理和客户特定数据库。我正在使用python Flask框架并使用flask-sqlalchemy插件开发它。

对于单个客户方案,我可以使用配置中的两个sqlalchemy绑定来处理此问题(一个用于客户数据库,一个用于管理数据库)。 但是当我添加多个客户时,我希望他们使用客户特定的配置来获得正确的客户端绑定数据库。对我而言,将客户数据保存在自己的数据库中以满足合规性要求非常重要。

我可以实现此功能的一种方法是部署与客户一样多的Web应用程序,但这不是可扩展的。

我探讨了使用blueprints,但蓝图用于为每个蓝图提供不同的视图。对我来说,所有客户的观点都是一致的。我只是希望他们根据子域访问不同的数据库。此外,随着客户列表的增长,继续创建蓝图可能不是一个好主意。如何使用相同的视图和模型定义使用单个烧瓶应用程序实现此目的?

1 个答案:

答案 0 :(得分:0)

您可以将一些代码放在用装饰器@app.before_request包装的函数中,以检查用户是否经过身份验证,然后根据Flask的request.url计算出正确的数据库,并将其存储在Flask的全局{{} 1}}对象。