Django项目中的通配符子域名
有没有人用过通配符子域名在他们的应用程序里?我需要想个办法来“本地化”我的应用。说到本地化,我的意思是说,任何访问 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