我的博客部署后,开始考虑到安全问题了,因为在学习过程中不止一次的看到过settings中的SECRET_KEY,既然这么命名,而且后面跟的字符串还那么复杂,就必然是不应该被公开的。
因此要将settings区分为开发环境和生产环境。
settings
删掉原settings.py文件,在其目录下创建settings文件夹,类似这样:
在开发环境下,使用python manage.py runserver --settings=myblog.settings.local
启动服务器
或者在虚拟环境的activate中添加set DJANGO_SETTINGS_MODULE="myblog.settings.local"
,这样做对于每个项目一个虚拟环境尤其是方便
local.py设置
from .base import *
SECRET_KEY = '长长的乱乱的'
DEBUG = True
base中相应就没有SECRET_KEY和DEBUG,BASE_DIR再套一层dirname
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
数据库也可能不同,因此也从base中移到local
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
production.py设置
import os
from .base import *
SECRET_KEY = os.environ['SECRET_KEY']
DEBUG = False
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
与local.py的主要区别就在于隐私信息的保护,如SECRET_KEY需要从环境变量中获取,这一步连同settings的设置一起,在主机虚拟环境的activate添加,Linux下将set改为export
set DJANGO_SETTINGS_MODULE="myblog.settings.local"
set SECRET_KEY="这里写长长的乱乱的"
最后,注意在.gitignore中加上local。
有强迫症的同学可以在这个网站自动生成SECRET_KEY