Django项目配置文件拆分
为了便于演示,本文将会新建一个名为
SettingsDemo
的全新项目本文基于
Pycharm
做配置演示
文章目录
1. 新建 settings 包
在项目的管理目录下新建一个包,取名为settings
2. 在settings下新建不同环境的配置文件
在settings
包下面新建几个配置文件:
base.py
--公共配置dev.py
– 开发环境配置prod.py
--生产环境配置(也可以直接在服务器上新建,不建议加入git管理)
3. 修改配置文件内容
1.base.py
base.py
文件是公共配置信息,所以我们把公共部分都放在这里面,其他配置文件都要导入这个配置文件。
常见的INSTALLED_APPS
, MIDDLEWARE
, TEMPLATES
, 以及时区,语言等配置都放在这里面。基本就是把原有的settings.py
内容复制到这里面,然后删除各个环境不一样的配置项即可。
注意事项:
由于我们将配置文件的位置移动到了更深一层路径,所以我们需要调整
BASE_DIR
的路径,调整如下:# 原配置 # BASE_DIR = Path(__file__).resolve().parent.parent # 修改后(后面多一个.parent),基础路径需要再往上一层 BASE_DIR = Path(__file__).resolve().parent.parent.parent
2. dev.py
dev.py
文件存放开发环境等信息,最常见的在这里面配置数据库,调试模式,添加debug-toolbar
调试应用等信息,注意,必须在最上面先导入base.py
的配置信息。
开发环境常用配置项示例如下:
from .base import *
# 开发环境开启调试模式
DEBUG = True
# 开发环境允许所有主机连接
ALLOWED_HOSTS = ['*']
# 开发环境使用sqlite3数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# 开发环境需要使用debug-toolbar调试工具
INSTALLED_APPS += ['debug_toolbar']
# 开发环境媒体文件存放路径,保存在项目下
MEDIA_ROOT = BASE_DIR / "media"
# 下面可以继续添加其他配置,如静态存放文件路径等
3. prod.py
prod.py
存放生成环境的配置信息,一般不会加入版本管理内,配置项与dev.py
的内容差不多
常用配置内容如下:
from .base import *
# 生产环境一定要关闭调试模式
DEBUG = False
# 生产环境只允许特定的服务器连接,所有数据都是通过这些服务器的nginx转发
ALLOWED_HOSTS = ['xx.xx.xx.xx', 'xx.xx.xx.xx']
# 生产环境使用mysql数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '192.168.1.123',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123456',
'NAME': 'demo',
}
}
# 生产环境的媒体文件一般不会放在项目路径下,防止项目更新或者其他原因删除用户上传的文件
MEDIA_ROOT = '/var/project/media'
# 下面可以继续添加其他配置,如静态存放文件路径等
4. 修改项目默认配置文件
按照上面的内容修改之后,此时项目是无法正常启动的,我们还需要修改做一些处理,告诉程序在哪加载配置文件。
方法1. 运行时指定配置文件位置
此方法是在启动时指定配置文件,生产环境一般使用这种
python manage.py runserver --settings=SettingsDemo.settings.dev
方法2. 修改 wsgi.py
文件,指定新的配置文件位置
开发时一般为了方便不会指定运行环境,因此需要修改默认的配置文件位置
# 原配置,这里指定默认的settings文件位置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SettingsDemo.settings')
# 修改后, 默认使用开发环境配置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SettingsDemo.settings.dev')
使用python manage.py runserver
启动系统时,默认是加载项目主目录下面的SettingsDemo.settings
模块,由于我们新建了一个同名的包,当我们删除原来的settings.py
之后,会出现报错,因为SettingsDemo.settings
模块里面缺少相关必须的配置项,所以我们要在settings
包下面的__init__.py
里面导入默认环境,使程序加载模块时能正确获取到配置。
在SettingsDemo/settings/__init__.py
中添加如下内容
from .dev import * # 默认加载开发环境,因为生产环境一般会在运行时指定配置文件
之后就可以使用命令python manage.py runserver
正常启动项目了
5. 处理 Python 控制台 打开时的报错
报错情况
上面修改默认settings
文件位置之后,在Pycharm
中打开Pycharm
控制台会出现下面的报错
Traceback (most recent call last):
File "<input>", line 6, in <module>
File "D:\myhub\SettingsDemo\venv\lib\site-packages\django\__init__.py", line 19, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "D:\myhub\SettingsDemo\venv\lib\site-packages\django\conf\__init__.py", line 82, in __getattr__
self._setup(name)
File "D:\myhub\SettingsDemo\venv\lib\site-packages\django\conf\__init__.py", line 67, in _setup
% (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
同时,工具中的运行 Manage.py 任务
功能也会无法使用(带有自动补全实在是太好用了,尤其是自定义的管理命令也能提示,再也不用担心记不住长长的命令了)
解决办法
打开Pycharm设置
,依次选择 语言和框架
-> Django
,在右侧的窗口里面修改设置
项的值,直接点击右侧的文件夹图标,选择你要使用的配置文件即可,演示这里选择开发环境的dev.py
应用之后,再次打开 Python 控制台
功能就不会出现报错了, 而且可以正常使用工具里面的运行 Manage.py 任务
功能
6. 无法使用Pycharm右上角三角形运行项目
经过上面的一系列修改之后,有可能**(注意:是有可能)**无法通过Pycharm右上角的绿色小三角启动项目,那是因为默认的settings
配置被清除了,就像下面这样
这里只需要将settings
模块位置补全即可, 注意是 .
的形式
DJANGO_SETTINGS_MODULE=SettingsDemo.settings.dev
修改完成后点击应用
,然后就可以正常启动项目了