You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Tenants+DRF环境下域名解析失败问题求助

问题分析与解决方案

一、域名解析失败的原因及修复

  • 浏览器自动处理.localhost域名:现代主流浏览器(Chrome、Firefox等)默认会将所有.localhost后缀的域名直接映射到127.0.0.1,无需额外系统配置。
  • 系统DNS无对应解析记录:控制台工具(ping、requests、HTTPie)依赖系统DNS服务解析域名,而系统默认没有demo.localhost的解析条目,因此抛出getaddrinfo failed错误。

修复步骤:

  1. 打开系统hosts文件:
    • Windows:C:\Windows\System32\drivers\etc\hosts
    • Linux/macOS:/etc/hosts
  2. 添加解析记录:
    127.0.0.1    demo.localhost
    
  3. 保存文件(Windows需管理员权限),之后控制台工具即可正常解析该域名。

二、django-tenants中向各租户发送API请求的方法

方法1:hosts文件映射多租户域名(开发环境用)

若租户数量较少,可在hosts文件中添加所有租户的域名记录:

127.0.0.1    demo.localhost
127.0.0.1    tenant2.localhost
127.0.0.1    tenant3.localhost

之后直接通过对应域名发送请求:

import requests
response = requests.get("http://tenant2.localhost:9000/api/zakaz")

方法2:反向代理配置(生产环境推荐)

用Nginx等反向代理服务器配置通配符子域名转发,示例Nginx配置:

server {
    listen 80;
    server_name *.localhost;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

所有*.localhost子域名都会被转发到Django服务,django-tenants可自动识别对应租户。

方法3:内部上下文请求(无需网络)

如果是Django内部服务间调用,可直接切换租户上下文后使用Django测试客户端,避免网络开销:

from django.test import Client
from django_tenants.utils import get_tenant_model

Tenant = get_tenant_model()
target_tenant = Tenant.objects.get(domain_url="demo.localhost")

# 切换到目标租户的Schema上下文
with target_tenant.schema_context():
    client = Client()
    response = client.get("/api/zakaz")
    # 处理响应数据
    print(response.json())

补充说明

你的TENANT_APPS配置无明显问题,确保rest_framework在租户应用列表中,可保证每个租户的API配置独立生效。


内容的提问来源于stack exchange,提问作者Евгений

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:52:54