Django 的配置文件

from django.conf import settings # 整合了默认的配置文件和用户自定义的配置文件
from django.conf import global_settings # Django内部默认的配置文件


title: Agent的配置文件
tags: Django

软件通常有自己默认的配置文件,还有用户自定义的配置文件。下面是参考Django对配置文件的管理方式在Agent中实现的

from django.conf import settings # 整合了默认的配置文件和用户自定义的配置文件
from django.conf import global_settings # Django内部默认的配置文件

start.py

import os

"""
启动文件,文件开始执行后把config.settings 写入系统环境变量,(参考Django的manage.py).
系统的环境变量是字典的形式
之后从系统环境变量中通过反射的方式导入模块
"""

os.environ['USER_SETTINGS'] = "config.settings"  # 把用户自定义的配置文件的路径以字符串的方式添加到系统环境变量中

from lib.conf.config import settings

"""
下面是测试:
通过settings就可以点出USER PWD EMAIL
"""
print(settings.USER)
print(settings.PWD)
print(settings.EMAIL)

lib/conf/config.py

import os
import importlib
from lib.conf import global_settings

"""
该文件用于导入系统配置文件和用户自定义文件,
"""


class Settings(object):
    def __init__(self):
        """
        先加载系统默认的配置文件,然后加载用户自定义的配置文件,
        如果用户自定义的配置文件中和系统配置文件重复,会覆盖系统的配置文件
        """

        # ###### 加载系统默认的配置文件 ######

        """
        通过dir获取配置文件中的所有内容,把大写的配置文件找出来
        通过反射的方式把对应配置文件的值取出来
        最后把配置文件中的内容通过setattr 设置到self中
        """
        for name in dir(global_settings):
            if name.isupper():
                value = getattr(global_settings, name)
                setattr(self, name, value)

        # ###### 加载用户自定义的配置文件 ######
        """
        从系统的环境变量中,通过字符串导入模块
        """
        settings_module = os.environ.get('USER_SETTINGS')
        if not settings_module:
            return
        m = importlib.import_module(settings_module)  # 通过字符串的方式导入模块
        for name in dir(m):
            value = getattr(m, name)
            setattr(self, name, value)


settings = Settings()  # 实例化的对象setting 中包含了系统默认配置和用户自定义的配置

posted @ 2017-10-11 11:59  hzxPeter  阅读(706)  评论(0)    收藏  举报