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

如何使用Python和Django创建SaaS应用程序,python,django,saas,Python,Django,Saas,你能给我一些文章/应用程序的建议吗?这些文章/应用程序允许你用Python和Django创建SaaS(软件即服务)应用程序 目前,我不了解的一般话题有: 您是否有一个适用于所有客户端的工作应用程序,还是每个客户端有一个应用程序 如何管理每个客户端的数据库访问、权限或不同的数据库 是否有任何工具允许您将一个应用程序转换为SaaS 软件即服务只是一个营销词,从技术上讲,它与通过互联网访问的服务器没有什么不同。所以问题3毫无意义。这就给我们留下了问题1和2: 在这种情况下,“应用程序”是什么意思?您的

你能给我一些文章/应用程序的建议吗?这些文章/应用程序允许你用Python和Django创建SaaS(软件即服务)应用程序

目前,我不了解的一般话题有:

  • 您是否有一个适用于所有客户端的工作应用程序,还是每个客户端有一个应用程序
  • 如何管理每个客户端的数据库访问、权限或不同的数据库
  • 是否有任何工具允许您将一个应用程序转换为SaaS

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

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

  • Django拥有大量用于用户管理、权限和组的工具。您可以给每个用户(每个客户端)不同的权限,这些权限决定了他们可以做什么。数据库访问应由web应用程序管理。例如,该代码确定需要在网页上显示哪些信息(取决于登录的客户端),并从数据库检索信息。根据您的目标范围,您还可以指定应该使用哪个数据库从中检索信息


  • 这是一个非常基本的例子,说明了你将如何去做

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

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

    这就是前端的转换方式。您可以创建变量来保存应用程序的徽标、标题、摘要和配色方案;允许每个用户自定义其实例

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

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

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

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

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

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

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

  • 一个项目,这将使维护更容易。我使用django ikari中的中间件处理主机解析
  • 你没有。见#1
  • 我使用以下方法:

    • :锚定(子)域
    • :每对象权限
    • :轻松的RESTful api
    • :比django注册更好
    • :基于计划的订阅控制
    • django定价:基于计划的订阅定义
  • 虽然没有必要,但从长远来看,以下措施将有所帮助:

    • :私人beta注册
    • django华夫饼干:功能翻转
    • django classy标签:漂亮、简单、整洁的模板标签创建
    • django merchant:抽象支付网关框架
    • django实体模型:使用模型进行快速测试
    • django merlin:更好的多步骤表单(向导)
  • 最后,很高兴有你

  • 我有一篇文章描述了我关于如何使用Django开发多租户SAAS web应用程序的建议。这里的多租户意味着当用户注册时,他们有自己的子域。重述:

    • 所有租户共享一个数据库,但每个租户都有自己的模式。假设您有一个网站abc.com,有人注册了一个xyz租户,以便他们通过xyz.abc.com访问他们的页面,然后对于租户xyz您有一个单独的模式,其中包含所有表,从而封装了仅与xyz租户相关的数据。还有其他的方法,比如一个数据库和一个模式,或者甚至是单独的数据库。但模式方法是最好的权衡。如果您感兴趣,图书馆的文档包含更详细的信息
    • 使用图书馆将租户的工作抽象出来。当有人访问xyz.abc.com时,您需要知道xyz是租户,并且您应该使用xyz模式。库为您执行此操作,因此在每次请求时,您只需执行
      current\u tenant=request.tenant
    • 您需要区分共享表和租户特定表。例如,拥有包含订单列表的表是非常重要的