7

(这不是“根据对多个站点的请求动态更改 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 测试客户端),但我正在考虑在具有多个线程和/或进程的生产环境中的并发请求。

4

1 回答 1

3

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

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

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

于 2011-05-27T01:07:49.707 回答