django-settings 配置文件拆分

django的配置文件settings.

settings.py 这个文件,是django为我们创建的,所有的配置信息 都在里面。

这样就会产生一些问题,如何区分线上线下的配置?涉及数据库,缓存,域名等配置。

如果使用if-else,settings未免显得臃肿,越来越复杂。

将settings文件进行拆分。

settings.py 改为 settings/base.py

新增__init__.pydevelop.py,product.py.

把需要独立配置的内容放在不同的模块内,共有的放在base.py中。

拆分完配置后,我们需要修改 manage.pywsgi.py这两个文件。

比如我们有一个student项目 ,它的manage.py

#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys


def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'student.settings')
    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)


if __name__ == '__main__':
    main()

修改os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'student.settings')

它的作用是设定django的settings模块,因为我们更改了settings的名字和位置

profile = os.environ.get('PROJECT_PROFILE','develop')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'student.settings.%s' % profile)

这样,就可以通过 环境变量PROJECT_PROFILE为develop或者 product,让django 加在不同的配置。

同理,uwsgi.py也这样修改

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'student.settings')

application = get_wsgi_application()
import os

from django.core.wsgi import get_wsgi_application

profile = os.environ.get('PROJECT_PROFILE','develop')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'student.settings.%s' % profile)

application = get_wsgi_application()

我们的develop.py

form .base import * # NOQA
# NOQA的作用是,告诉PEP 8规范工具,这里不需要检测

DEBUG = True
DATABASES = {
# ....
}

猜你喜欢

转载自blog.csdn.net/sunt2018/article/details/90288301