13

我可以使用一些帮助来为我正在进行的项目制定攻击计划。

想象一下,该站点是为一个负责监督分布在世界各地的区域销售办事处的团队服务的。该项目的目的是让超级用户快速启动一个特定于每个办公室的新子站点——站点会频繁添加。办公室子站点应完全包含特定于该子站点的“管理员”用户,并且应该是用户友好的 CMS。超级用户应该能够介入和管理所有这些办公室子站点。

除了独立的办公室子站点实例外,每个子站点还需要管理联系人、潜在客户等,并将其存储在一个中心区域以供超级用户使用。

我已经使用 Django 完成了一些站点,但从来没有使用多租户。我想对使用的技术或可能有用的教程/文档提出建议。

要求:

  1. 每个子站点使用相同的源(模板、JS、可用功能等),但可以修改以反映模板中的自定义内容。
  2. 每个子站点分配的子域(可以选择使用完全限定的域),在项目中配置,而不是在硬编码的设置文件中。
  3. 子站点特定的用户访问控制,除了可以访问所有子站点的超级用户。
  4. 为每个子站点提供“独立”CMS 的能力。即,子站点管理员只能看到他们的内容。我对这个项目的偏好是 django-cms,但我愿意接受建议。
  5. 支持从所有子站点汇集数据的应用程序,但将子站点“管理员”限制为仅在该应用程序中查看他们的记录。

考虑到上述情况,您会推荐什么方法?我愿意重新考虑技术,但我想坚持使用 Python。

4

4 回答 4

13

有一个很棒的应用程序叫做django-tenant-schemas,它使用 PostgreSQL 模式机制来创建多租户。

您得到的是指定SHARED_APPS包含跨所有模式(子站点)共享的对象,以及TENANT_APPS包含特定于子站点的对象,即用户、记录等。模式彼此完全隔离。

每个 PostgreSQL 模式都绑定到一个域 url,以便中间件检查HOST请求的一部分并将 db 连接的模式设置为适当的模式。

此外,它允许您定义一个PUBLIC_SCHEMA_URLCONF允许您为公共模式指定 urlconf 文件的 urlconf 文件 - 不绑定到任何子站点的元站点。

于 2013-10-07T17:15:41.943 回答
5

抱歉快速而肮脏的回答,我只是分享我为实现多租户所做的工作:

上述两个库在结合使用时,能够为多租户且灵活的 django 实例提供服务。我在这里灵活的意思是:您可以定义任何模型,无论是“租户”还是“全局”。因此,您可以拥有一个具有全局用户但每个租户产品目录或每个租户 + 产品的站点。从我尝试过的许多 django 应用程序中,这是实现多租户的最灵活方式

于 2013-11-25T02:55:42.063 回答
3

基于 Django 的 CMS Mezzanine还具有多租户支持

除了我认为的子站点用户控件之外,它具有您要求的大部分功能。管理员页面可以按站点分隔管理员用户,但普通用户不能。

但是,如果您不需要 CMS,这对您的用例来说可能有点过头了,但为了完整起见,我想在这里提及它。

于 2015-02-04T18:02:21.633 回答
0

我一直在尝试将django-tenants与 Wagtail 一起使用,但这种组合效果不佳,或者让我说,尽管进行了很多尝试,但我无法让 wagtail 管理页面正常工作。 我认为会尝试切换到我更广泛使用的 django-tenant-schemas

注意:现在不维护 django-tenant-schemas。

于 2021-07-22T12:25:29.733 回答