在Java开发的时候,我们都知道可以通过本地application.properties
或者application.xml
并可通过一些优先级设置,将远程配置中心的配置项,用我们本地的文件进行覆盖,以方便本地的开发和调试,并可以通过.gitignore
控制防止提交到远程仓库。在Django内,其实也有这样的方法能够做这个事儿,那就是使用local_settings.py
。在Django的.gitignore
模板文件里面,对于这个文件是默认存在的,也就会在Git提交时无须担心其提交到远程仓库。
其实这玩意儿不是那么难理解,但是我今天在网上搜索相关资料的时候,发现有现有的教程都是同一篇互相抄,抄的源头也被我找到了是Stack Overflow,而且代码是有问题的。这篇文章其实主要是修正下网上的错误,以正视听。
我的开发环境:
MacBook Pro (13-inch, 2020) / PyCharm 2021.1 / Python 3.9 / Django 3.2.5
首先,在你工程的settings.py
的结尾处添加如下代码:
try:
from .local_settings import *
except ImportError:
pass
就是这个代码,网上互抄的全部都不行无法执行,错在了
local_settings
前面的.
没了……
这个代码的意义就在于尝试读取是否有local_settings.py
这个文件,如果有的话,且在settings.py
读入有问题时则读入覆盖配置。
然后,在你的settings.py
的文件夹下新建local_settings.py
,然后放置需要覆盖的参数即可,例如我的工程放置的如下:
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
DEBUG = True
ALLOWED_HOSTS = ['*']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db',
'USER': 'user',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '3306',
},
'lite': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
好了,就这么简单。