当前位置: 首页 > 面试题库 >

Django多租户

刘凡
2023-03-14
问题内容

Tl;
dr:有没有方法可以覆盖默认行为reverse

在我的django项目中,我有很多网址,例如

 url(r'^\w+/company/', include("company.urls", namespace="company")),

允许使用以下网址

.../companyA/company/
.../companyB/company/

这样,我便可以使用自定义中间件来修改请求,以包括基于使用我的网站的公司的一些特定详细信息

这一切工作正常,除了当Django试图破译与完整路径reverse{% url .. %}

它似乎/x/company/作为正则表达式的默认匹配返回。由于该django.utils.regex_helper方法next_char具有用于\w映射到的转义映射x

url标签我已经能够覆盖更换/x/正确的公司名称,我想知道是否有类似的事情,我可以做重写reverse以同样的方式,或其他任何东西,我可以做些什么来解决这个问题呢?

以前我在用

url(r'^(?P<company_name>\w+)/company/', include("company.urls", namespace="company"))

但这意味着我必须在每个视图中都包含一个参数

def view(request, company_name):
    ...

以及将其包含在我{% url %}试图避免的所有其他视图调用中(即使用)。


问题答案:

为了易于使用,Django编译了一个页面,其中包含可以完成此操作的每个可能的现有django软件包。但是下面是我自己的简单实现

我修改了我的nginx代理配置以使用以下内容

server_name ~(?<short_url>\w+)\.domainurl\.com$;

... stuff related to static files here
location / {
        proxy_set_header X-CustomUrl $short_url;
        .... other proxy settings
}

这样做是在请求标头中创建一个变量,然后可以在Django中使用该变量。然后,我在自定义中间件中使用了此变量,以扩展对模型的引用的请求,从而允许在任何地方使用它。

class CompanyMiddleware(object):    
    def process_request(self, request):
        if settings.DEBUG:
            request.company = CompanyClass.objects.get(id=1)
            return None

        short_url = request.META.get("HTTP_X_CUSTOMURL")

        try:
            company = CompanyClass.objects.get(short_url=short_url)
        except Model.DoesNotExist:
            return HttpResponseBadRequest('Company not found')

        request.company = company

        return None

例子:

www.companya.domainurl.com   # short_url is companya
test.domainurl.com           # short_url is test

要在模板中使用此功能,必须将上下文处理器添加到 settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    'django.core.context_processors.request'  # This one in particular
)


 类似资料:
  • 目前为止,我们已经让用户页面在多租户风格下工作。为使它工作,我们看起来并没有做太多的变化。但请记住,我们正在对一个原来不是多租户的系统作修改。 让我们在 Roles 表应用类似的原则。 再一次,一个租户的用户在不能查看或修改其他租户的角色,每个租户的用户是相互独立工作的。 我们先在 RoleRow.cs 添加 TenantId 属性: namespace MultiTenancy.Administ

  • 如何使用django租户模式将数据从共享模式迁移到多租户模式? 我们有一个saas,最初没有使用django租户模式,而是使用共享数据库、共享模式的方法。我们现在发现了django租户模式,并认为这是正确的选择。 现在的问题是如何将数据从单一的模式迁移到独立的租户模式。 文档说明如下: 注意:如果这是您第一次运行此命令,您的数据库应该是空的。 在我现有的应用程序中,我有一个租户表,所有其他模型都有

  • 我使用和配置了hibernate的多租户。我还编写了一个过滤器,截取url并确定谁是租户。 我有几个问题/困惑。 > 这种方法合适吗?我也想过在用户会话中存储租户标识,但我认为这不是一个好主意。(在过去,我在会话中存储东西时遇到过问题,在某些情况下有其局限性)。 我对这两种方法感到困惑,请问还有第三种方法吗。对于多租户,我选择了hibernate的策略。

  • 由于我们现在有一个行为处理仓储的详细信息,我们只需在行(rows)实现 IMultiTenantRow 接口并添加 TenantId 属性。 从 SupplierRow.cs 开始: namespace MultiTenancy.Northwind.Entities { //... public sealed class SupplierRow : Row, IId

  • 全新的,查看wso2 API管理器1.8.0。我为一家拥有多个组织/团队的公司工作,所以建立多租户似乎是合乎逻辑的选择。 按照《快速入门指南》,我首先创建了一个新租户,给它一个“dev.api.myorg.company.net”域,添加了一些用户,我可以登录。我添加了一个API。 我能够使用商店中列出的URL命中endpoint: http://wso2server。公司net:8280/t/d

  • 我们正面临着解决这个问题的艰难时刻!我们正在尝试在不使用默认租户的情况下为Spring Boot服务使用MTA。这意味着当当前上下文中没有租户时,我们希望从我们的CurrentTenantIdentifierResolver实现返回null。这在我们用JavaEE+Hibernate+Deltaspike数据构建的其他服务中运行良好,但在Spring服务启动时失败。 异常消息如下:“由:org.h