• 模拟Django中settings配置文件写自己的settings配置文件


    对于Django中settings配置文件的神奇之处我就不谈了,在这里我想模拟Django的配置写一份属于自己的配置文件

    在写一个完整的项目之前,我对自定制一个启动文件run.py

    import sys
    import os
    BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    sys.path.append(BASEDIR)
    os.environ['AUTO_CLIENT_SETTINGS'] = "conf.settings"
    from src import script
    
    
    if __name__ == '__main__':
        script.start()


    接下来会按照主函数的逻辑进入我的script文件

    
    
    from lib.config import settings
    from .client import AgentClient
    from .client import SaltSshClient
    
    def start():
        if settings.MODE == 'AGENT':
            obj = AgentClient()
        elif settings.MODE == "SSH" or settings.MODE == 'SALT':
            obj = SaltSshClient()
        else:
            raise Exception('模式仅支持:AGENT/SSH/SALT')
        obj.exec()
    
    

    注意上边我标红的那一行,他引用的是配置文件里的settings变量,那么settings变量到底是什么呢?

    在整个中,有lib文件夹,lib文件夹下有config文件夹,config文件夹下有__init__.py文件,文件代码如下:

    import os
    import importlib
    from . import global_settings
    
    class Settings(object):
        """
        global_settings,配置获取
        settings.py,配置获取
        """
        def __init__(self):
    
            for item in dir(global_settings):
                if item.isupper():
                    k = item
                    v = getattr(global_settings,item)
                    setattr(self,k,v)
    
            setting_path = os.environ.get('AUTO_CLIENT_SETTINGS')
            md_settings = importlib.import_module(setting_path)
            for item in dir(md_settings):
                if item.isupper():
                    k = item
                    v = getattr(md_settings,item)
                    setattr(self,k,v)
    
    
    settings = Settings()

    注意之前script引用的是该py文件中的一个实例化对象,通过Settings类的__init__方法,我们可以知道,settings在实例化的过程中,分别按照先后顺序把全局的配置文件和普通配置文件里的变量全部赋值给了setting对象(也就是赋予了属性)。

    那么这时我们在开始引用的setting就实现了自动读取所有配置文件信息的功能,也就可以在项目中自由自在的使用了。

  • 相关阅读:
    Qt支持中文显示
    C/C++ 知识点---LIB和DLL的区别与使用(网摘)
    Inno Setup
    C/C++ 知识点---字符串函数
    es5 JSON对象
    Es567严格模式
    mysql常用命令
    promise 获取文件内容
    postman连接不了localhost问题解决
    node---处理post请求
  • 原文地址:https://www.cnblogs.com/575dsj/p/7601701.html
Copyright © 2020-2023  润新知