【发布时间】:2010-08-12 01:56:58
【问题描述】:
我已经修改了我在http://effbot.org/zone/django-multihost.htm 找到的 multihost.py 中间件,以动态设置 settings.SITE_ID,但有些担心我可能刚刚离开预订。
我发现的多域托管的大多数示例都是使用硬编码到各自 SITE_ID 的多个 settings.py 文件设置的。
我是否在这里创建了具有致命缺陷的修复程序?会动态改变这个值吗?
from django.conf import settings
from django.contrib.sites.models import Site
class MultiHostMiddleware:
def process_request(self, request):
try:
host_raw = request.META["HTTP_HOST"]
colon = host_raw.find(':')
if colon > -1:
host = host_raw[0:colon]
else:
host = host_raw
s = Site.objects.get(domain=host)
if s:
settings.SITE_ID = s.id
except KeyError:
pass # use default urlconf (settings.ROOT_URLCONF)
对于好奇的人来说,到目前为止它已经启动并运行,但还没有经受住实际流量。
【问题讨论】:
-
不知道这是否可行,但我想知道使用
urlparse是否会更好地获取主机名(docs.python.org/library/urlparse.html)。 -
附加信息,此代码已经在一个 2 域站点上使用了大约一周,没有明显的故障。流量相当低,但我认为这个概念成立。
标签: django django-middleware django-sites