在同一个项目中一起使用 DRF 和 django-tenants

问题描述 投票:0回答:1

我目前正在使用 django-tenants 构建一个多租户应用程序。

但是我也想在与 django-tenants 相同的项目中运行我的 REST API。

这就是问题出现的地方,如果我将我的 API 设为共享租户应用程序,那么每个租户子域最终都会拥有自己的 API。

例如,所有注册租户都采用 API 路由作为其子域的一部分:

tenant1.example.com/api、tenant2.example.com/api 等

我不希望我的 API 位于每个租户之下,我只想在一个域上运行它,最好是 api.example.com

有人对如何设置有任何建议吗?其他人在他们的项目中如何处理这个问题?

django django-rest-framework multi-tenant django-tenants
1个回答
0
投票

当使用共享 API 处理 Django 中的多租户时,您需要仔细构建 URL 路由并配置 Django 项目以在 URL 级别处理多租户。

以下是实现此目的的一般方法:

  1. 将 API URL 与租户 URL 分开:

    • 在 Django 项目中创建专用的
      api
      应用程序。
    • 定义您的 API 视图、序列化器以及此应用程序中的任何其他组件。
  2. 使用单个 API 子域:

    • 将您的 API 配置为在单个子域下运行,例如,
      api.example.com
    • api
      应用程序的
      urls.py
      中定义 API 路由。
  3. 配置 Django 租户:

    • 使用 Django-Tenants 进行多租户,但将其配置为仅考虑子域进行租户识别。
    • 更新您的
      TENANT_URLCONFS
      设置以包含
      api
      应用程序的 URL 配置。

以下是

urls.py
应用程序中的
api
的外观示例:

# api/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('some-endpoint/', views.SomeAPIView.as_view(), name='some-endpoint'),
    # Add more API routes as needed
]

然后,在主项目的

urls.py
中,包含 API 路由并配置 Django-Tenants:

# project/urls.py
from django.contrib import admin
from django.urls import include, path
from tenants import urls as tenant_urls
from api import urls as api_urls

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include(api_urls)),  # API routes
    path('tenants/', include(tenant_urls)),  # Tenant-specific routes managed by Django-Tenants
]

这样,API 路由与特定于租户的路由分开,并且 API 在专用子域下运行 (

api.example.com
)。

确保正确配置 Django-Tenants 设置并进行调整以满足您的特定要求。请注意 URL 的包含顺序,以避免冲突,并确保 API 路由优先于租户特定路由。

© www.soinside.com 2019 - 2024. All rights reserved.