【问题标题】:How to get arbitrary number of django apps running on same domain, sharing User database, but with different (and isolated) app models?如何让任意数量的 django 应用程序在同一域上运行,共享用户数据库,但具有不同(和隔离)的应用程序模型?
【发布时间】:2013-09-24 21:43:48
【问题描述】:

我正在尝试决定如何实现此架构。我有一个基本的 Django 包,我们称之为 BaseApp。我一直在开发这个作为分发工具供其他人使用。 BaseApp 主要定义了一些视图行为和一些基本模型。开发人员可以安装 BaseApp,然后制作另一个应用程序,我们称之为 NeatThing,它只需要定义几个模型和模板,其余的由 BaseApp 完成,而且他们现在只需很少的努力就可以拥有一个迷你应用程序事物。重复 x 100,我们有 100 个不同的开发人员在做 100 个不同的 Neat Things。而且它们都可以在不同的环境中作为独立的服务器工作,等等。

现在我想提供 1 个版本的 BaseApp,1 个用户数据库,以及所有 100 个不同的 Neato-Whiz-Bang 应用程序,并在一个域上一起为它们提供服务,因此用户都来到同一个地方。

我该如何做到这一点:

  1. 1 个 URL 指向 100 个不同的应用程序之一(以我配置的方式以编程方式)
  2. 确保 100 个不同的应用程序相互隔离(完全不能相互交互)
  3. 为每个应用程序(有限)授予对用户数据库的访问权限,以便用户可以与其应用程序中的模型相关联(我知道 Django 多数据库支持 - 但是如何在授予每个应用程序访问权限的同时保护一个用户数据库?)

我要求这是一个高级实现方法的观点。 IE。我从这里往哪个方向走?

【问题讨论】:

    标签: python database django url paas


    【解决方案1】:

    您所描述的内容听起来很像 postgresql 尝试使用 schemas 完成的内容。请参阅django-tenant-schemas,了解在 django 中此方法的出色实现。免责声明:我是该项目的贡献者。

    【讨论】:

    • 推广您参与的项目没问题 :) 这会将我锁定在 Postgresql 中吗?另外,为什么“模式”与单独的数据库?那里有什么优势?更适合外键?
    • 另外,关于通过主机名识别租户...如果每个租户都有一个子域、tenant1.mysite.com、tenant2.mysite.com 等...但我提供一个页面在 mysite.com/thing 移交给tenant1.mysite.com/thing 或tenant2.mysite.com/thing (同时维护mysite.com/thing 的url)?
    • 数据库的意义在于分离应用程序,模式的意义在于分离应用程序内的租户。是的,模式肯定会把你锁在 postgres 中,但这不一定是坏事,因为 postgres 非常灵活。 “与数据库不同,模式不是严格分开的:用户可以访问他所连接的数据库中任何模式中的对象,如果他有权限这样做的话。” (来自文档)
    • 至于主机名,我相信只需使用您自己的中间件而不是 django-tenant-schemas 附带的中间件即可轻松完成。基本上只需将此文件复制到您的存储库中,然后对其进行更改,以便它使用您要使用的部分 url 来确定要使用的架构:github.com/bcarneiro/django-tenant-schemas/blob/master/…
    • 在 postgres 中尝试使用多个数据库完成您想要的另一个问题:您可能会遇到内存问题。然而,在数据库中有许多模式不会产生同样的负面影响。此外,您不能像在 MySQL 中那样在 postgres 中跨数据库连接。另见:stackoverflow.com/questions/1152405/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2021-10-07
    • 2011-08-07
    • 2015-08-21
    • 2014-07-21
    • 2015-07-05
    相关资源
    最近更新 更多