Django使用local_settings.py实现本地个性化配置(网上互抄教程修正)

2021/09/13 21:02 下午 posted in  技术 comments

在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',
    }
}

好了,就这么简单。