Django settings.py

时间:2019-10-23 17:52:12

标签: django settings

在我的项目登录时,会加载一些settings.py环境变量以启用某些行为:

unit_id = settings.COMPANY

登录到系统中的另一个用户通过一个函数更改此变量的值时,它会反映在所有其他已经处于活动状态的用户中:

settings.COMPANY = "coke"

在这种情况下,所有用户都将在settings.COMPANY中看到“可乐”。我相信这将保存在内存中,并且仅适用于有问题的用户部分,因为我没有写物理文件。

我想知道Django是否通过这种方式处理settings.py环境变量:它是否动态传播到所有用户打开的所有实例?

可以通过以下context_processors.py访问此变量:


def units(request):
    unit_id = settings.COMPANY

1 个答案:

答案 0 :(得分:1)

You should not change settings at runtime

(主要是)因为Django对运行时一无所知,因此绝对有可能运行同一Django安装的多个实例。更改这样的设置不会将其传播到任何其他进程。

  

我想知道这是否是Django处理settings.py环境的方式   变量:它是否动态传播到由...打开的所有实例   所有用户?

Django不会为每个用户运行一个实例。在一个特定的端口上侦听的进程有一个或多个(例如,如果您使用诸如gunicorn之类的东西,或者如果您使用带有负载均衡器的多个服务器。)

要进行一些更改,可以指定一个默认值,但是应该在数据库中存储活动公司之类的信息。