首页 > 解决方案 > 如何为 django settings.py 文件覆盖 os.environ.get()

问题描述

我正在使用一些环境变量。如果环境变量中的一行具有我之前放置的标志,我可以使用它们来获取它们os.environ.get("somekey", None)。我想应用一些逻辑。

环境中的示例行:

FILE_PASS=password
FILE_NAME=examplefile #CHECK

在 settings.py 中:

file_pass = os.environ.get("FILE_PASS", "")
file_name = os.environ.get("FILE_NAME","default_file")

我不想写my_custom_env(),因为我希望每个人都在我的逻辑后面继续使用 os.environ.get 函数。

我怎样才能做到这一点?编辑:这是调用猴子补丁吗?EDIT2:我想我想要的是这样的

import os
def new_os_environ(key, default=''):
    env = os.environ
    line = env.get(key, default)
    if "#CHECK" in line:
        #do some stuff
    return line

os.environ.get = new_os
os.environ.get("FILE_NAME","heey")

标签: python-3.x

解决方案


这个:

    if "#CHECK" in line:
        #do some stuff

将不起作用,因为#CHECK将被视为注释,并且不会与env.get命令一起显示。

我想你可以逐行读取文件,但更好的方法是在 env 文件中添加一个新变量。类似于以下内容:

CHECK=TRUE

然后您可以专门检查该值是否存在并进行相应的编码。

check = os.environ.get("CHECK","FALSE")
if check == "TRUE":
   # Do your stuff herre

如果您想直接使用布尔值,请使用 1 和零。我更喜欢文本字符串 TRUE 和 FALSE,因为我认为它们更突出,让你在做什么更明显,但这只是个人喜好。


推荐阅读