如何使用Python和Django创建SaaS应用程序

Ili*_*iev 24 python django saas

您能否向我推荐一些允许您使用Python和Django创建SaaS(软件即服务)应用程序的文章/应用程序.

目前我不了解的一般主题是:

  1. 您是否有一个适用于所有客户的工作应用程序或每个客户端一个应用
  2. 如何为每个客户端管理数据库访问,权限或不同的数据库
  3. 是否有任何工具可以将一个应用程序转换为SaaS

air*_*nix 36

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

  4. 虽然没有必要,但从长远来看,以下内容将有所帮助:

    • django-hunger:私人测试版注册
    • django-waffle:功能翻转
    • django-classy-tags:漂亮,简单,整洁的模板标签创建
    • django-merchant:抽象支付网关框架
    • django-mockups:用模型快速测试
    • django-merlin:更好的多步形式(向导)
  5. 最后,很高兴

  • 如果你有一个可配置的Cms /框架大约3 + 4我就会为此付钱. (2认同)

Bur*_*lid 8

一个非常基本的,基本的例子,说明你如何去做.

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

要将此应用程序"转换"为服务,您必须对其进行配置,以便应用程序的大多数用户特定部分都是参数化的(它们可以被"模板化" - 因为缺少更好的单词).

这就是前端的转换方式.您可以创建变量来保存应用的徽标,标题,预告片,配色方案; 允许每个用户自定义他们的实例.

到目前为止,您的应用程序可以在前端自定义.它仍然使用第一阶段设计的相同数据库.

现在只需要显示与特定用户相关的字段.这将参数化数据库.因此,您可以添加一列,将每行标识为属于特定用户; 然后创建基于登录用户筛选记录的视图或存储过程.

现在应用程序可以"租用"了; 因为您可以根据用户自定义实例.

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

您可以决定对于某些用户类型(或"包"),您需要运行应用程序的专用实例.因此,对于"高级"或"超级"用户,您希望自己的专用系统运行.

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

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


Sim*_*ser 7

软件即服务只是一个营销词,它在技术上与可通过互联网访问的服务器没有什么不同.所以问题3毫无意义.这给我们留下了问题1和2:

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

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


Ars*_*ean 6

我有一篇博客文章描述了我关于如何使用 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