【问题标题】:Django settings.pyDjango 设置.py
【发布时间】:2019-10-23 17:52:12
【问题描述】:

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

unit_id = settings.COMPANY

当另一个登录系统的用户改变这个变量的值时,通过一个函数,它反映在所有其他已经活跃的用户中:

settings.COMPANY = "coke"

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

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

这个变量由 context_processors.py 访问,如下:


def units(request):
    unit_id = settings.COMPANY

【问题讨论】:

    标签: django settings


    【解决方案1】:

    You should not change settings at runtime.

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

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

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

    要进行一些可更改的设置,您可以指定一个默认值,但您应该在数据库中存储一些类似于活动公司的内容。

    【讨论】:

    • 那么我上面介绍的解决方案可以在生产环境中使用吗?
    • 不,我不会推荐它。即使有可能,也可能导致不良后果。将 COMPANY 值存储在数据库或 Redis 等键值存储中
    • 好的,我想我可以为 COMPANY 执行此操作,但我还有另一个问题:我在登录时也设置了 settings.TIME_ZONE,因为每个用户都在不同的区域。您能建议用户登录后如何设置时区吗?
    猜你喜欢
    • 2015-11-03
    • 2021-07-21
    • 2014-12-07
    • 2016-06-24
    • 2017-12-12
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多