(这不是"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测试客户端),但我正在考虑具有多个线程和/或进程的生产环境中的并发请求。
答案 0 :(得分:3)
为什么不关闭django.contrib.sites
?如果你从INSTALLED_APPS
删除它,你应该没事。
具体来说,任何编写良好的应用程序现在应该使用get_current_site
中的django.contrib.sites.models
函数。未安装站点应用程序时,此函数将仅返回RequestSite
对象(不是模型)的实例,该实例与标准站点实例的工作方式类似。
要回答原始问题,动态修改设置从不是个好主意。