在中间件中动态更改SITE_ID被认为是个好主意吗?

时间:2011-04-07 15:15:58

标签: django settings middleware django-middleware django-settings

(这不是"Changing Django settings variable dynamically based on request for multiple site"的重复,因为之前的问题包括在运行时进行更严肃的重新配置)

我使用sites.Site将内容绑定到项目中的域/主机(通过外键)。基于Site选择适当的request.META['HTTP_HOST']发生在我的自定义中间件中。

但是,我知道sites框架的这种使用并不完全是规范方式(我有一个应用程序实例为不同的域提供不同的数据,而{{ 1}} - AFAIK - 旨在与几个实例一起使用,每个域一个。)

困扰我的元素是sites - 将应用程序的当前实例与一个settings.SITE_ID(域)绑定在一起的静态设置。这在几个地方使用,即Site(在密码重置电子邮件中撰写完整的绝对网址)。 因此,根据contrib.auth动态更改SITE_ID会很酷。

所以我的问题是:

动态更改SITE_ID(即在中间件中)是一个好主意吗?

文档指出在运行时更改设置通常是个坏主意(here),但在这种情况下(在中间件调用足够早的时候)也许这样做很好。

(编辑):

它在本地工作(Django测试客户端),但我正在考虑具有多个线程和/或进程的生产环境中的并发请求。

1 个答案:

答案 0 :(得分:3)

为什么不关闭django.contrib.sites?如果你从INSTALLED_APPS删除它,你应该没事。

具体来说,任何编写良好的应用程序现在应该使用get_current_site中的django.contrib.sites.models函数。未安装站点应用程序时,此函数将仅返回RequestSite对象(不是模型)的实例,该实例与标准站点实例的工作方式类似。

要回答原始问题,动态修改设置从不是个好主意