如何使用 Python 和 Django 创建 SaaS 应用程序
Posted
技术标签:
【中文标题】如何使用 Python 和 Django 创建 SaaS 应用程序【英文标题】:How to create SaaS application with Python and Django 【发布时间】:2012-04-13 00:41:10 【问题描述】:您能否推荐一些文章/应用程序,让您可以使用 Python 和 Django 创建 SaaS(软件即服务)应用程序。
目前我不明白的一般主题是:
-
您是为所有客户端提供一个工作应用程序还是为每个客户端提供一个应用程序
您如何管理每个客户端的数据库访问、权限或不同的数据库
是否有任何工具可以让您将一个应用程序转换为 SaaS
【问题讨论】:
如果您在 4 年后在这里发表您自己的反馈意见将会非常有趣。如果您继续从事该项目。谢谢。 @imanis_tn 好吧,4 年后发生了很多事情,但这是重要的部分。我开发了一个名为 Get A Newsletter 的 SaaS 应用程序。我们使用 Django REST 框架来构建我们的 API,但没有使用任何特殊的东西。每个用户没有子域,内部计费系统,我们手动处理每个对象的权限。其实当我加入上面提到的项目时,系统已经启动并运行了,我们刚刚开始创建 REST Api,所以我们主要受现有代码库的限制,但结果还不错。 太棒了,您可以在 4 年后回复。我喜欢这样。 【参考方案1】:-
一个项目,这将使维护更容易。我使用 django-ikari 中的中间件处理主机解析。
你不知道。见#1
我使用以下:
django-ikari:锚定(子)域 django-guardian :每个对象的权限 django-tastypie : 简单的 RESTful api django-userprofiles : 比 django-registration 好 django-billing:基于计划的订阅控制 django-pricing:基于计划的订阅定义虽然没有必要,但从长远来看,以下内容会有所帮助:
django-hunger:私人测试版注册 django-waffle : 功能翻转 django-classy-tags : 漂亮、简单、整洁的模板标签创建 django-merchant:抽象的支付网关框架 django-mockups:使用模型进行快速测试 django-merlin:更好的多步骤表单(向导)最后,很高兴拥有
django-activity-stream【讨论】:
如果你有一个 3 + 4 左右的可配置 Cms/框架,我会为此付钱。 附言。其中一些是 GPL(例如 Ikari、Billing)。我不知道这是否会使事情复杂化。 @RobertGrant 因为在使用 Django 创建 Web 应用程序的过程中,我很少发现自己创建的东西不需要注册和用户配置文件。自从我使用 django 创建任何东西(在前端使用 Angular 和 Node 在后端进行更多工作)以来,已经有大约一年的时间了,所以我不记得确切的原因了。【参考方案2】:一个非常基本的、基本的例子,说明你将如何去做。
假设您有一个简单的应用程序,旨在解决特定的业务案例。例如,您创建了一个应用来处理您办公室的房间预订。
要将这个应用程序“转换”为服务,您必须对其进行配置,以便应用程序的大多数用户特定部分都是参数化的(它们可以“模板化” - 因为缺乏更好的词)。
这就是前端的转换方式。您可以创建变量来保存应用程序的徽标、标题、预告片、配色方案;允许每个用户自定义他们的实例。
到目前为止,您的应用能够在前端进行自我定制。它仍在使用第一阶段设计的同一数据库。
现在是只显示与特定用户相关的字段的问题。这将参数化数据库。因此,您可以添加一列,将每一行标识为属于特定用户;然后创建根据登录用户过滤记录的视图或存储过程。
现在可以“出租”应用程序了;因为您可以根据用户自定义实例。
然后它会从这里变得更大 - 取决于您的应用程序的规模、类型和预期的定制。您可能会认为,当每个用户都有自己的专用数据库而不是存储过程 + 视图组合时,您的应用程序性能会更好。
您可能会决定,对于某些用户类型(或“包”),您需要运行应用程序的专用实例。因此,对于“高级”或“超级”用户,您希望运行自己的专用系统。
如果您的应用程序需要大量存储空间 - 您可能会决定对存储空间单独收费。
底线是它与使用的语言无关。它更多的是架构和设计问题。
【讨论】:
【参考方案3】:软件即服务只是一个营销词,从技术上讲,它与可通过 Internet 访问的服务器没有什么不同。所以问题3没有意义。这给我们留下了问题 1 和 2:
在这种情况下,“应用程序”是什么意思?您的 Web 应用程序(使用 Python 和 Django 构建)可以有多个 Django 应用程序(构成 Web 应用程序的组件),但我认为这不是您的意思。您可以在 Python/Django 中构建您的网站,并根据登录的用户(客户端)具有各种自定义选项。例如,高级客户端可以启用多个高级选项,但它仍然是同一代码库的一部分。只是某些客户端没有显示某些选项(按钮/控件等)
Django 有很多用于用户管理、权限和组的工具。您可以给每个用户(每个客户端)不同的权限,这些权限决定了他们可以做什么。数据库访问应由您的 Web 应用程序管理。例如,代码确定需要在网页上显示哪些信息(取决于登录的客户端),并且该代码从数据库中检索信息。根据您的目标规模,您还可以指定应该使用哪个数据库来检索信息。
【讨论】:
当然问题 3 是有道理的(至少目前看来)——转换“应用程序”可能意味着 Windows GUI 应用程序、unix 命令行应用程序或任何数量的东西。【参考方案4】:我有一个blog post 描述了我关于如何使用 Django 制作多租户 SAAS Web 应用程序的建议。这里的多租户意味着当用户注册时,他们有自己的子域。回顾一下:
所有租户共享一个数据库,但每个租户都有自己的架构。假设您有网站 abc.com 并且有人注册了一个 xyz 租户,以便他们通过 xyz.abc.com 访问他们的页面,然后为租户 xyz 您有一个包含所有表的单独架构,因此封装了仅与 xyz 租户相关的数据。还有其他方法,例如拥有一个数据库和一个架构供所有人使用,或者甚至拥有单独的数据库。但是模式方法是最好的权衡。如果您有兴趣,django-tenants 库的文档包含更详细的信息 使用django-tenants 库抽象出与租户的工作。当有人访问 xyz.abc.com 时,您需要知道 xyz 是租户,并且您应该使用 xyz 架构。 django-tenants 库会为您执行此操作,因此对于每个请求,您只需执行current_tenant = request.tenant
即可获取租户对象
您需要区分共享表和特定于租户的表。例如,具有订单列表的表格是特定于租户的。每个租户可能都有自己的数据库,其中包含他们的所有订单。该表应该在 xyz 架构内。同时,您将拥有一些核心 Django 表,例如 user。例如,可以共享数据以禁止两个用户使用同一电子邮件进行注册。
您需要配置您的 DNS 以捕获通配符表达式 *.abc.com,您可以在您的 CPanel 中添加一个 A 记录并使用 *.abc.com
链接到你的服务器的 IP
【讨论】:
以上是关于如何使用 Python 和 Django 创建 SaaS 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python (django) 创建英语词典应用程序?