2012-03-29 51 views
16

您可以通过一些文章/应用程序向我提供建议,这些文章/应用程序允许您使用Python和Django创建SaaS(软件即服务)应用程序。如何使用Python和Django创建SaaS应用程序

眼下的一般性议题,我不明白是:

  1. 你有一个为所有客户或工作申请每个客户端一个应用
  2. 你如何管理数据库访问权限或不同的DB为每个客户端
  3. 是否有任何允许您将一个应用程序转换为SaaS的
+3

它如果你在4年后发布你自己的反馈意见,这将会非常有趣。如果你继续在这个项目上工作。谢谢。 – 2016-04-21 10:31:38

+2

@imanis_tn好,4年后很多东西发生了,但这里是重要的一部分。 我在一个名为Get A Newsletter的SaaS应用程序上工作。我们使用Django REST框架来构建我们的API,但没有使用任何特殊的东西。每个用户没有子域,内部计费系统,我们手动处理每个对象的权限。 实际上,当我加入上述项目时,系统已经启动并运行,并且我们刚刚开始创建REST Api,因此我们主要受现有代码库限制,但结果非常好。 – 2016-04-22 06:52:33

回答

31
  1. 一个项目,这将使维护更容易。我使用django-ikari中的中间件处理主机解析。
  2. 你没有。见#1
  3. 我使用下面的:

  4. 虽然不是必要的,下面将在长期内帮助:

    • django-hunger:内测注册等
    • Django的华夫:功能翻转
    • django-classy-tags:漂亮,简单,整洁的模板标签创作
    • django-merchant:抽象支付网关框架
    • Django的原型:高配车型快速检测
    • Django的梅林:更好的多步的形式(向导)
  5. 最后,很高兴有

+2

如果你在3 + 4周围有一个可配置的Cms /框架,我会为此付钱。 – 2013-07-10 22:27:06

+0

你为什么喜欢django-userprofiles? – 2014-08-01 13:29:32

+0

P.s.其中一些是GPL(例如Ikari,Billing)。我不知道这是否使事情复杂化。 – 2014-08-01 13:36:12

5

软件即服务只是一种营销手段词,它在技术上没有什么不同来自可通过互联网访问的服务器。所以问题3没有意义。这让我们留下了问题1和问题2:

  1. 在这种情况下,'app'是什么意思?您的Web应用程序(使用Python和Django构建)可以具有多个Django应用程序(构成Web应用程序的组件),但我认为这不是您的意思。您可以使用Python/Django构建网站,并根据哪个用户(客户端)登录有各种自定义选项。例如,高级客户端可以启用多个高级选项,但它仍然是同一代码库的一部分。这只是某些选项(按钮/控件等)不显示某些客户端

  2. Django有大量用于用户管理,权限和组的工具。您可以为每个用户(每个客户端)授予不同的权限,这些权限决定他们可以执行的操作。数据库访问应该由您的Web应用程序管理。例如,代码确定需要在网页上显示哪些信息(取决于哪个客户端登录),并且该代码从数据库中检索信息。根据您要达到的规模,您还可以指定应使用哪个数据库从中检索信息。

+0

当然,问题3是有意义的(至少目前它读取的内容) - 转换“一个应用程序”可能意味着一个Windows GUI应用程序,一个unix命令行应用程序或任何数量的东西。 – 2017-01-03 19:38:02

6

一个非常基本的例子,你将如何去做。

假设您有一个旨在解决特定商业案例的简单应用程序。例如,您创建了一个应用程序来处理您办公室的房间预订。

“转换”这个程序为服务您必须配置它使得大多数应用程序的用户特定的零件是参数(它们可以“模板化” - 由于缺乏更好的词)。

这是如何转换前端。您可以创建变量来保存应用程序的徽标,标题,预告片和配色方案;允许每个用户定制他们的实例。

到目前为止,您的应用程序能够在前端自行定制。它仍在使用第一阶段设计的相同数据库。

现在只显示那些与特定用户相关的字段。这将参数化数据库。所以你可能会添加一个标识每一行属于特定用户的列;然后创建基于登录用户筛选记录的视图或存储过程。

现在应用程序可以“租”出来;因为您可以根据用户自定义实例。

然后它会从这里变得更大 - 取决于您的应用程序的规模,类型和预期的定制。当每个用户拥有自己的专用数据库而不是存储过程+视图组合时,您可能会认为您的应用程序性能更好。

您可能会决定对于某些用户类型(或“包”),您需要运行应用程序的专用实例。因此,对于“高级”或“超”用户,您希望拥有自己的专用系统。

如果您的应用程序需要大量存储 - 您可能会决定单独收取存储费用。

底线是它与所使用的语言无关。它更多的是架构和设计问题。

0

我有一个blog post描述我如何去ab的建议使用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表,如用户。数据可以共享,例如,禁止两个用户使用同一封电子邮件注册。
  • 你需要配置你的DNS赶上一个通配符表达* .abc.com,以便您可以用*.abc.com链接到你的服务器的IP地址添加您的cPanel内的一个记录
相关问题