• 模拟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就实现了自动读取所有配置文件信息的功能,也就可以在项目中自由自在的使用了。

  • 相关阅读:
    CKA-Kubernets(K8s) (一)
    CKA-docker 容器的管理
    CKA-docker 镜像的管理
    CKA-docker 基础
    开年自省系列—— 阅读完一本书《财务之路系列》 读书笔记
    Sublime开启VIM模式
    JavaScript 踩坑开始(ing...)
    代码思考题玩玩
    P2016 战略游戏-树形DP
    皇宫看守-树形DP
  • 原文地址:https://www.cnblogs.com/575dsj/p/7601701.html
Copyright © 2020-2023  润新知