我正在开发一个多租户应用程序,它通过路径接收租户。例如:www.project.com/tenant1/或www.project.com/tenant2/。
我已按照指导(http://books.agiliq.com/projects/django-multi-tenant/en/latest/shared-database-shared-schema.html)代码创建了解析地址的代码,并选择了路径并选择了核心租户。但是,由于路由是动态的,因此我无法找到一种方法来在请求到达路由时忽略租户。
例如:在输入“ www.project.com/tenant1/”时,该索引将返回索引,但是要做到这一点,您必须忽略路径中的“ tenant1 /”。
在这里,我解析网址并选择架构:
def path_from_request(request):
#get path
print('Path:', request.get_full_path())
print('Path Striped: ', request.get_full_path().split("/")[1].lower())
return request.get_full_path().split("/")[1].lower()
def tenant_schema_from_request(request):
path = path_from_request(request)
print('Path: ', path)
tenants_map = get_tenants_map()
print('Tenant Map: ', tenants_map.get(path))
return tenants_map.get(path)
def set_tenant_schema_for_request(request):
schema = tenant_schema_from_request(request)
print('Schema ', schema)
with connection.cursor() as cursor:
cursor.execute(f"SET search_path to {schema}")
def get_tenants_map():
return {
"tenant1": "tenant1",
"tenant2": "tenant2",
}
在这里,我尝试重定向网址:
urlpatterns = [
re_path(r'^(?P<slug>[\w-]+)/', admin.site.urls),
]
我想输入“ www.project.com/tenant1/”或“ www.project.com/tenant2/”,网址将回复我的管理页面。