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

> 作者：zning（https://ning.ae） · 发布：2021/09/13 21:02 下午 (UTC+8) · 原文：https://zning.me/16315381724367.html

在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`的结尾处添加如下代码：

```python
try:
    from .local_settings import *
except ImportError:
    pass
```

> 就是这个代码，网上互抄的全部都不行无法执行，错在了`local_settings`前面的`.`没了……

这个代码的意义就在于尝试读取是否有`local_settings.py`这个文件，如果有的话，且在`settings.py`读入有问题时则读入覆盖配置。

然后，在你的`settings.py`的文件夹下新建`local_settings.py`，然后放置需要覆盖的参数即可，例如我的工程放置的如下：

```python
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',
    }
}
```

好了，就这么简单。
