如何在Django中删除或忽略一部分URL?

时间:2019-05-31 20:02:22

标签: python regex django postgresql

我正在开发一个多租户应用程序,它通过路径接收租户。例如: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/”,网址将回复我的管理页面。

0 个答案:

没有答案