项目在开发环境和实际的生产环境中,settings.py
配置文件通常是不一样的,而且按照以往的开发经验来看,项目开发完成后settings.py
通常存放着一些用户名与密码,所以需要对这些隐私配置项进行单独的配置。
修改settings文件路径
在setting.py
的上级目录创建一个Python package
文件夹,直接新建文件夹也是ok的,不过要再新建一个__init__.py
的声明文件。
然后将原始的settings.py
文件移动至settings
文件夹内,修改文件名为base.py
,即基础设置(可以理解为开发环境和生产环境配置不变的项)。
此时如果直接使用python manage.py runserver
命令会报错,因为manage.py
里面定义了settings.py
文件的默认路径,需要在manage.py
里修改设置文件的路径,我这里是将meetingroom.settings
修改为 settings.base
def main():
# 将meetingroom.settings修改为settings.base
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meetingroom.settings')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.base')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
此时开启服务,就会默认调用settings
文件夹下面的base.py
的配置。
创建生产环境配置
在settings
文件夹下新建一个production.py
文件,用于配置生产环境下的配置。
# production.py
from .base import *
# 通常使用nginx映射出去,所以只需要设置settings就行
ALLOWED_HOSTS = ['127.0.0.1']
DEBUG = False
# 更多请按需配置
此时运行python manage.py runserver --setting settings.production
即可以生产环境的配置启动服务。
密码等隐私项配置
在base.py
中,将隐私项配置为None
...
LOCAL_TEST_USERNAME = None
LOCAL_TEST_PASSWORD = None
...
之后在本地配置文件local.py
或其他配置文件中
from .base import *
TEST_USERNAME = 'hsinyan'
TEST_PASSWORD = 'root'
如此配置即可,可以避免测试环境的敏感信息泄露。