开发Django项目是最常见,也是最麻烦的一个问题就是如何区分开发配置与线上配置。一般这个时候我们会拆分setting.py为多个配置文件,例如:base.py、develop.py...等等,然后统一放在settings文件夹里面。
例如新建一个Django项目的时候,默认结构如下:
test_project
├── manage.py
└── test_project
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
新建一个 settings 的文件夹
里面新建 base.py、develop.py这两个文件,然后删除setting.py
test_project ├── manage.py └── test_project ├── __init__.py ├── settings <- add │ ├── __init__.py <- add │ ├── base.py <- add │ ├── develop.py <- add ├── urls.py └── wsgi.py
base.py里面是公用配置,例如:SECRET_KEY、INSTALLED_APPS
develop.py里面是开发环境下的配置,例如:DEBUG=True、开发环境数据库等。
当我们配置好这些文件之后,运行django会报错,里面比较重要的是这句:django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must
not
be empty.
这是因为我们把settings.py删除了,django找不到配置文件。这个时候我们可以在运行python manage.py runserver的时候加上环境配置:python manage.py runserver --settings=test_project.settings.develop
这个时候就能正常运行了。
Django version 3.1.2, using settings 'test_project.settings.develop' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
使用多个配置环境带来的另一个好处就是,我们还可以根据不同的端口号来使用不同的环境。例如我可以在 8000
端口使用开发环境的配置,在 8001
端口使用模拟生产环境的配置,这样子带来的好处是我们在开发的时候可以同时兼顾多个环境下的状态。