将博客代码提交到仓库的时候,也许不经意间会将你不想泄漏的信息(比如数据库url,密码,密钥,调试状态,电子邮件主机,允许的主机等等)暴露。所以我们需要考虑,将我们的信息保存在安全的地方(比如直接保存在服务器上,而不是github)。
为了达到这个目的,我们将会用到一个模块,python-decouple,它可以将代码中的设置参数分离,保存在另外一个文件(这个文件就可以直接保存在服务器,而不提交到仓库),我们将这个文件称为环境文件。
安装
执行pip install python-decouple
用法
打开settings.py
,一般可以看到有如下代码:
SECRET_KEY = '3izb^ryglj(bvrjb2_y1fZvcnbky#358_l6-nn#i8fkug4mmz!'
DEBUG = True
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'HELLO_DJANGO',
'USER': 'U_HELLO',
'PASSWORD': 'hA8(scA@!fg3*sc&xaGh&6%-l<._&xCf',
'HOST': '127.0.0.1',
'PORT': '',
}
}
SECRET_KEY=3izb^ryglj(bvrjb2_y1fZvcnbky#358_l6-nn#i8fkug4mmz!
DEBUG=True
DB_NAME=HELLO_DJANGO
DB_USER=U_HELLO
DB_PASSWORD=hA8(scA@!fg3*sc&xaGh&6%-l<._&xCf
DB_HOST=127.0.0.1
记得将.env
添加到.gitignore
,确保环境文件不会提交到仓库。
修改settings.py
,首先导入模块
import os
#导入python-decouple模块
from decouple import config
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', cast=bool)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': config('DB_NAME'),
'USER': config('DB_USER'),
'PASSWORD': config('DB_PASSWORD'),
'HOST': config('DB_HOST'),
'PORT': '',
}
}
传递数据
先来看两行代码
DEBUG = config('DEBUG', cast=bool)
EMAIL_PORT = config('EMAIL_PORT', cast=int)
函数config()
传递两个参数,一个是传递值的变量名,一个是传递值的类型。通常来说,我们从文件读取的数据会被保存为字符串,这时候,cast
参数就派上用场了。在函数config()
,cast
参数可以指定读取的数据的类型。看回上面第一行代码,从环境文件读取到的DEBUG的值被指定为布尔值了。
对于 ALLOWED_HOSTS
ALLOWED_HOSTS=.localhost,
我们可以指定其cast
参数为
ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=lambda v: [s.strip() for s in v.split(',')])
这样看起来很复杂,我们可以使用这个模块自带的Csv
函数。
from decouple import config, Csv
ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv())
默认值
如果有一个值为定义在环境文件中(即在环境文件中没有这个值),我们可以向config()
传递一个额外的参数来指定默认值。
DEBUG = config('DEBUG', default=True, cast=bool)
覆盖
有些时候你想不通过环境文件改变参数,你可以覆盖环境文件的变量。因为环境变量(os.environ)优先级高于环境文件变量:DEBUG=True python manage.py
注意,Decouple总是按此顺序进行赋值:
- 环境变量;
- 环境文件:
.in
i或.env
文件; - 传递给配置的默认参数。
将环境文件上传到服务器
这里我们主要用到xshell,lrzsz。首先用xshell连接到服务器(具体百度下就知道了)。
然后执行命令yum install -y lrzsz
进行lrzsz的安装,接着执行sudo rz
命令本地上传文件到服务器,在弹出的文件选择框选择我们的环境文件即可。
如果需要下载服务器的文件,执行sz filename
。