(这不是“根据对多个站点的请求动态更改 Django 设置变量”的重复,因为前面的问题涵盖了在运行时进行更严重的重新配置)
我sites.Site
用来将内容绑定到我的项目中的域/主机(通过外键)。选择合适Site
的基于request.META['HTTP_HOST']
发生在我的自定义中间件中。
但是,我知道这样使用sites
框架并不完全是规范的方式(我有一个应用程序实例为不同的域提供不同的数据,而sites
- AFAIK - 旨在与多个实例一起工作,每个域一个)。
最困扰我的元素是settings.SITE_ID
- 将当前应用程序实例与一个Site
(域)联系起来的静态设置。这用于多个地方,即contrib.auth
(在密码重置电子邮件中撰写完整的绝对网址)。因此,SITE_ID
基于request.META['HTTP_HOST']
.
所以我的问题是:
动态更改 SITE_ID(即在中间件中)是否是个好主意?
文档指出,在运行时更改设置通常是个坏主意(此处),但在这种情况下(在足够早的中间件中)这样做可能很好。
(编辑):
它在本地按预期工作(Django 测试客户端),但我正在考虑在具有多个线程和/或进程的生产环境中的并发请求。