这两天咨询了大佬很多问题,大佬还直接写了一篇教程,真是受宠若惊。虽然我一贯的作风是只引用不转载,不过这次还是破例一下吧~~

原文地址

设置独立的生产环境

1. 原理

Django 在加载 settings 的时候会根据环境变量选择不同的 settings

参考 manage.py +6os.environ.setdefault 设置了一个名为 DJANGO_SETTINGS_MODULE、值为目标 settings 的环境变量。

在生产环境中,uWSGI 会根据指定的 WSGI Module 加载程序。Djangowsgi.py 中同样执行了 os.environ.setdefault

2. 方案

  1. settings.py 的同级目录创建一个新的 Python 文件,例如 prd.py
  2. 按照如下示例编写 prd.py 的内容。

# -*- coding:utf-8 -*-
from .settings import *

# Write your settings below.
# For example:

SECRET_KEY = 'your-secret-key'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': 'your-db-host',
        'PORT': '3306',
        'NAME': 'your-db-name',
        'USER': 'your-db-user',
        'PASSWORD': 'your-db-password',
        'OPTIONS': {
            'charset': 'utf8mb4'
        }
    }
}
你可以根据需要写入各类配置。未在此处写出的配置会从 Django 的默认值以及 settings.py 继承过来。

  1. 修改 wsgi.py +14,将 settings 替换成你的 prd。 更好的建议是复制一份 wsgi.py 再改(当然,uWSGI 的配置文件也要进行相应的修改)。

  2. 不要忘记将线上相关的配置加入你的 .gitignore

3. 对于本地的开发环境呢?

原理是一样的,你可以创建一个 local_settings.py 嘛。
manage.py 有一个 --settings 的参数,值是你的 local_settings,就像这样:

$ python manage.py runserver --settings=your_project.local_settings

当然,你也可以照葫芦画瓢搞一个新的 local_manage.py