# 10、Django开发||生产环境

由于开发过程中使用git来进行版本管理，而本地开发环境的设置和生产环境的设置难免会不一样。若是单纯的settings.py文件则会导致两个环境的设置冲突，相互覆盖再手动修改未免太过于麻烦，而且容易出错。

这里笔者选择拆分 settings.py 文件来实现不同环境设置的管理

首先新建config文件夹

其次将settings.py拆分为三个文件:

* setting\_base.py #通用设置文件，insert\_app等通用设置都放在这个文件内
* setting\_dev.py #开发环境设置文件，数据库，debug已经allow\_host等开发环境设置都在这个文件中
* setting\_pro.py #生产环境设置文件，数据库，debug已经allow\_host等生产环境设置都在这个文件中

之后我们需要在 setting\_base.py 文件中导入开发环境设置已经生产环境设置，为了让不同的环境能够灵活的导入对应的设置，我们需要引入环境变量这个东西，好让电脑识别这到底是生产环境还是开发环境。

```python
if os.environ.get('PRODUCTION_SETTINGS', 0):
    from .setting_dev import *
else:
    from .setting_pro import *
1234
```

通过查询电脑是否有`PRODUCTION_SETTINGS`环境变量来识别开发环境还是生产环境，我们只需要在服务器中`/etc/profile`文件中写入该环境变量即可导入正确的设置文件

最后我们需要让django框架识别设置文件到底在哪

1. 修改manage.py文件，将原来的`项目名.settings`值更改为`config.setting_base`

```python
def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.setting_base')  #修改此处的值
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)
```

1. 修改 uwsgi.py 文件，和manage.py一样

```python
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.setting_base')
```

1. 修改pycharm项目configurations中的`DJANGO_SETTINGS_MODULE`值为`config.setting_base`（可选，使用pycharm需修改，让其能够在ide中运行）
2. 修改.idea中的\*.ini文件里的settingsModule值为`config/setting_base.py`（可选，这个设置是为了让pycharm的Python Console正常运行）

至此，所有修改都已完成，可以启动项目进行新的开发了
