【问题标题】:Using Django tenants on the same domain, rather than subdomains or multiple domains在同一个域上使用 Django 租户,而不是子域或多个域
【发布时间】:2020-10-02 05:36:32
【问题描述】:

如果我使用 django-tenant-schemas(或 django-tenants fork),它们的设置方式似乎是您将访问单独子域或单独域上的租户。

这意味着使用tenant1.mysite.com 或tenant1.com 访问tenant1。

但是,我想使用 mysite.com/tenant1/、mysite.com/tenant2/ 访问租户。

这是因为我使用的是 DRF,所以我只想将他们的信息分开存储。我想以同样的方式通过 API 访问它们。因此,例如,我可以调用 mysite.com/tenant1/api/token/。

我该如何设置?

【问题讨论】:

  • URL 的变化与数据在数据库中的存储方式有什么关系
  • 我不确定如何使用不同的 URL 访问数据。它不会影响数据在数据库中的存储方式。

标签: python django multi-tenant


【解决方案1】:

您可以使用自定义中间件,然后用它替换默认中间件。 Django Tenant Schema documentation 的高级用法部分(我想,在 Django Tenants 中也是如此)描述了如何做到这一点。以下是如何使用自定义 HTTP 标头的示例。

class XHeaderTenantMiddleware(BaseTenantMiddleware):
"""
Determines tenant by the value of the ``X-DTS-SCHEMA`` HTTP header.
"""
def get_tenant(self, model, hostname, request):
    schema_name = request.META.get('HTTP_X_DTS_SCHEMA', get_public_schema_name())
    return model.objects.get(schema_name=schema_name)

在您的情况下,您可以通过从 URL 路径中提取租户(可能使用 string.split("delimiter"))来获取租户,而不是使用 HTTP 标头,然后将其设置为上面代码中的 schema_name 的值.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2012-09-06
    • 2013-10-08
    • 1970-01-01
    相关资源
    最近更新 更多