当前位置: 首页 > 知识库问答 >
问题:

DRF/多租户-如何在单元测试中指定租户主机(域)?

程承恩
2023-03-14

环境-Django,Rest框架,多租户。

在我的单元测试中,我试图在租户模式中(而不是在公共场合)命中一个endpoint。它失败是因为主机(例如)是。com而不是demo1。实例通用域名格式。

我(当然)在谷歌上搜索过,但找不到如何指定请求的域名部分。我发现的其他帖子说,最好使用“反向”来获取URL,而不是硬编码。

这是我的测试:

    def test_private_valid_authorization(self):
        self.demo1_tenant.activate()

        user = User.objects.get(username='test.admin@example.com')
        token, created = Token.objects.get_or_create(user=user)
        self.client.credentials(HTTP_AUTHORIZATION='Token ' + token.key)

        response = self.client.get(reverse('clients:client-html" target="_blank">list'))

        self.assertEqual(response.status_code, 200, "Expected status code: 200; got %s." % response.status_code)

租户(及其模式)是在setUpTestData()方法中创建的,因此self。demo1_租户。activate()只需连接到已经存在的架构。

用户是通过固定装置导入的,因此使用了“get”而不是“create_user”。

我得到以下结果:

AssertionError: 403 != 200 : Expected status code: 200; got 403.

在代码中添加诊断显示,我将其缩小为django_租户/middleware/main的process_request()方法。py-具体地说是hostname\u from_request()方法。如果我把demo1放进去。实例com'而不是使用_request(它只是'example.com')中的返回值,我的测试成功了。我希望有人能给我指出正确的方向。

共有1个答案

颜嘉福
2023-03-14

我找到了答案。。。

要指定基本域名,请执行以下操作:

self.client.defaults['SERVER_NAME'] = 'example.com'

所以我可以根据需要使用example.comdemo1.example.comdemo2.example.com

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

  • 问题内容: 在Spring 3应用程序中,我试图通过Hibernate 4的本机MultiTenantConnectionProvider和CurrentTenantIdentifierResolver实现多租户。我发现在Hibernate 4.1.3 中存在此问题,但是我正在运行4.1.9并仍收到类似的异常: 以下是相关代码。在I中,我现在只写了一些简单的代码,每次都只返回一个新的连接,并且在这

  • 我们正在开发一个多租户应用程序。在体系结构方面,我们为业务逻辑设计了共享中间层,为数据持久性设计了每个租户一个数据库。也就是说,业务层将与每个租户的数据库服务器建立一组连接(连接池)。这意味着应用程序为每个租户维护单独的连接池。如果我们预计约有5000个租户,那么这个解决方案需要高资源利用率(每个租户的应用服务器和数据库服务器之间的连接),这会导致性能问题。 我们已经通过保持公共连接池解决了这个问

  • 问题内容: 在Spring 3应用程序中,我试图通过Hibernate 4的本机MultiTenantConnectionProvider和CurrentTenantIdentifierResolver实现多租户。我看到在Hibernate 4.1.3 中存在此问题,但是我正在运行4.1.9并仍然收到类似的异常: 以下是相关代码。在I中,我现在只写了一些哑代码,每次都只返回一个新的连接,并且此时总

  • 问题内容: Tl; dr:有没有方法可以覆盖默认行为? 在我的django项目中,我有很多网址,例如 允许使用以下网址 这样,我便可以使用自定义中间件来修改请求,以包括基于使用我的网站的公司的一些特定详细信息 这一切工作正常,除了当Django试图破译与完整路径和… 它似乎作为正则表达式的默认匹配返回。由于该方法具有用于映射到的转义映射 该标签我已经能够覆盖更换正确的公司名称,我想知道是否有类似的

  • 我们在 Users 表中添加一个 TenantId 字段,但是没有在 UserRow 中定义,并且也不能在用户对话框中看到该字段。 该字段只能被 admin 用户查看和编辑。即使是授予了访问管理租户权限的其他用户也不能查看或者修改这些信息。 首先把 TenantId 字段添加到 UserRow.cs: namespace MultiTenancy.Administration.Entities {