django储存数据库连接信息

背景

django需要和mysql数据库连接,但是因为代码开源,如果把密码明文直接放在文本里会非常不安全。

经过试验,找到了django储存数据库连接信息的最佳方式。

解决

直接存在当前机器的环境变量里!

以Linux举例

写入shell配置文件里

我用zsh,就在使用用户下的.zshrc里边加入:

export ALIYUN_RDS_1_PASSWORD="password"
export ALIYUN_RDS_1_NAME="database name"
export ALIYUN_RDS_1_USER="user name"
export ALIYUN_RDS_1_HOST="host"
export ALIYUN_RDS_1_PORT="port"
...

然后source .zshrc

django文件里直接引用来自本台机器刚才设置的环境变量:

import os

...

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": os.environ["ALIYUN_RDS_1_NAME"],
        "USER": os.environ["ALIYUN_RDS_1_USER"],
        "PASSWORD": os.environ["ALIYUN_RDS_1_PASSWORD"],
        "HOST": os.environ["ALIYUN_RDS_1_HOST"],    
        "PORT": os.environ["ALIYUN_RDS_1_PORT"]
        }
}

windows和mac同理,也是直接写在环境变量中

思路借鉴:https://levelup.gitconnected.com/how-to-store-passwords-in-django-the-right-way-c572cb4f2eb1