Django 在中间件中动态更改站点ID被认为是好主意吗?

Django 在中间件中动态更改站点ID被认为是好主意吗?,django,settings,middleware,django-middleware,django-settings,Django,Settings,Middleware,Django Middleware,Django Settings,(这不是重复的,因为前面的问题涉及在运行时进行更严重的重新配置) 我使用sites.Site将内容绑定到项目中的域/主机(通过外键)。根据请求选择合适的站点。META['HTTP\u HOST']在我的自定义中间件中进行 然而,我知道这样使用站点框架并不是一种规范的方式(我有一个为不同域提供不同数据的应用程序实例,而站点-AFAIK-设计用于处理多个实例,每个域一个) 最让我困扰的是设置。SITE\u ID—将当前应用程序实例与一个站点(域)绑定的静态设置。这在几个地方使用,即contrib.a

(这不是重复的,因为前面的问题涉及在运行时进行更严重的重新配置)

我使用
sites.Site
将内容绑定到项目中的域/主机(通过外键)。根据
请求选择合适的
站点
。META['HTTP\u HOST']
在我的自定义中间件中进行

然而,我知道这样使用
站点
框架并不是一种规范的方式(我有一个为不同域提供不同数据的应用程序实例,而
站点
-AFAIK-设计用于处理多个实例,每个域一个)

最让我困扰的是
设置。SITE\u ID
—将当前应用程序实例与一个
站点
(域)绑定的静态设置。这在几个地方使用,即
contrib.auth
(在密码重置电子邮件中组成完整的绝对url)。 因此,基于
request.META['HTTP\u HOST']
动态更改
SITE\u ID
会很酷

所以我的问题是:

动态更改站点ID(即在中间件中)被认为是一个好主意吗?

文档指出,在运行时更改设置通常是个坏主意(),但在这种情况下(在称为“足够早”的中间件中)这样做可能没问题

(编辑):


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

为什么不关闭
Django.contrib.sites
?如果您从
已安装的应用程序
中删除它,您应该不会有问题

具体来说,任何编写良好的应用程序现在都应该使用
django.contrib.sites.models
中的
get\u current\u site
功能。未安装sites应用程序时,此函数仅返回与标准站点实例类似的
RequestSite
对象(非模型)的实例


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

有趣的问题。你真的试过吗?看起来你在暗示你确实试过了。我很好奇结果是什么。@Nimmy Lebby:是的,我在本地尝试过(自定义中间件-首先在
middleware\u CLASSES
list上负责设置站点\u ID),还做了一些单元测试(使用Django测试客户端)。我正在考虑生产wsgi环境-具有多线程/多进程关注点的并发请求。嗯,这种方法似乎还可以(RequestSite确实有通过
get_host
在内部获得的
domain
参数),我稍后会检查并反馈;)现在谢谢你。