项目在开发环境和实际的生产环境中,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即可以生产环境的配置启动服务。

运行结果

可以看到debug=False

密码等隐私项配置

base.py中,将隐私项配置为None

...

LOCAL_TEST_USERNAME = None
LOCAL_TEST_PASSWORD = None

...

之后在本地配置文件local.py或其他配置文件中

from .base import *

TEST_USERNAME = 'hsinyan'
TEST_PASSWORD = 'root'

如此配置即可,可以避免测试环境的敏感信息泄露。

Last modification:December 22nd, 2020 at 09:42 pm