在我的项目登录时,会加载一些settings.py环境变量以启用某些行为:
unit_id = settings.COMPANY
登录到系统中的另一个用户通过一个函数更改此变量的值时,它会反映在所有其他已经处于活动状态的用户中:
settings.COMPANY = "coke"
在这种情况下,所有用户都将在settings.COMPANY中看到“可乐”。我相信这将保存在内存中,并且仅适用于有问题的用户部分,因为我没有写物理文件。
我想知道Django是否通过这种方式处理settings.py环境变量:它是否动态传播到所有用户打开的所有实例?
可以通过以下context_processors.py访问此变量:
def units(request):
unit_id = settings.COMPANY
答案 0 :(得分:1)
You should not change settings at runtime。
(主要是)因为Django对运行时一无所知,因此绝对有可能运行同一Django安装的多个实例。更改这样的设置不会将其传播到任何其他进程。
我想知道这是否是Django处理settings.py环境的方式 变量:它是否动态传播到由...打开的所有实例 所有用户?
Django不会为每个用户运行一个实例。在一个特定的端口上侦听的进程有一个或多个(例如,如果您使用诸如gunicorn之类的东西,或者如果您使用带有负载均衡器的多个服务器。)
要进行一些更改,可以指定一个默认值,但是应该在数据库中存储活动公司之类的信息。