Django项目中的通配符子域名

4 投票
1 回答
2562 浏览
提问于 2025-04-16 22:45

有没有人用过通配符子域名在他们的应用程序里?我需要想个办法来“本地化”我的应用。说到本地化,我的意思是说,任何访问 ny.foo.com/items/new/ 的人都会被引导到一个页面,这个页面会在数据库里查找纽约的新商品。显然,我们可以把纽约换成任何一个州。

如果有任何建议,那就太好了。

谢谢!

1 个回答

5

我会使用中间件来实现,比如:

class StateCodeMiddleware(object):

   def process_request(self, request):
        bits = request.META['HTTP_HOST'].split('.')
        if len(bits) == 3 and len(bits[0]) == 2:
            request.state_code = bits[0]
        else:
            request.state_code = None
            # Or a redirect to the default state.

然后在你的任何视图中,你只需要检查 request.state_code,就可以只获取那个状态的新项目。


补充:在开发过程中,最好的方法是设置一个本地DNS服务器。例如,dnsmasq配置起来非常简单:

address=/.dev/127.0.0.1 # 在 dnsmasq.conf 中

这样 *.dev 就会指向本地计算机。你还需要配置你的系统使用这个本地DNS服务器(在UNIX系统上,你可以通过在 /etc/resolve.conf 中添加 nameserver 127.0.0.1 来做到这一点)。

另外,如果你的域名数量有限,你也可以在 /etc/hosts 文件中列出所有的域名:

127.0.0.1 ny.localhost, az.localhost  # and so on

撰写回答