我目前正在使用 django-tenants 构建一个多租户应用程序。
但是我也想在与 django-tenants 相同的项目中运行我的 REST API。
这就是问题出现的地方,如果我将我的 API 设为共享租户应用程序,那么每个租户子域最终都会拥有自己的 API。
例如,所有注册租户都采用 API 路由作为其子域的一部分:
tenant1.example.com/api、tenant2.example.com/api 等
我不希望我的 API 位于每个租户之下,我只想在一个域上运行它,最好是 api.example.com
有人对如何设置有任何建议吗?其他人在他们的项目中如何处理这个问题?
当使用共享 API 处理 Django 中的多租户时,您需要仔细构建 URL 路由并配置 Django 项目以在 URL 级别处理多租户。
以下是实现此目的的一般方法:
将 API URL 与租户 URL 分开:
api
应用程序。使用单个 API 子域:
api.example.com
。api
应用程序的 urls.py
中定义 API 路由。配置 Django 租户:
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 路由优先于租户特定路由。