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

gor*_*sky 7 django settings middleware django-middleware django-settings

(这不是"基于对多个站点的请求动态更改Django设置变量"的重复,因为之前的问题包括在运行时进行更严肃的重新配置)

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

但是,我知道sites框架的这种使用并不完全是Canonical Way(我有一个应用程序实例为不同的域提供不同的数据,而sites- AFAIK - 设计用于多个实例,每个域一个).

困扰我的元素是settings.SITE_ID- 静态设置,将当前的应用程序实例与一个Site(域)联系起来.这在几个地方使用,即contrib.auth(在密码重置电子邮件中组成完整的绝对URL).因此,SITE_ID基于动态改变会很酷request.META['HTTP_HOST'].

所以我的问题是:

动态地改变SITE_ID(即在中间件中)被认为是个好主意?

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

(编辑):

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

Smi*_*ris 3

你为什么不直接关掉django.contrib.sites呢?如果你把它从 中删除INSTALLED_APPS,你应该没问题。

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

不过,要回答最初的问题,动态编辑设置从来都不是一个好主意