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

  • 相关阅读:
    基于yum的方式安装Cloudera Manager Agent(使用Mysql 8.0版本)
    数据库基础SQL知识面试题二
    Zabbix Server 自带模板监控更加灵活MySQL数据库
    Zabbix Server 自带模板监控有密码MySQL数据库
    Zabbix Server 自带模板监控无密码MySQL数据库
    Zabbix Server 监控Web页面
    HDFS集群常见报错汇总
    Hadoop ha CDH5.15.1-hadoop集群启动后,集群容量不正确,莫慌,这是正常的表现!
    FastDFS + Nginx代理方式访问
    FastDFS 分布式文件系统部署实战及基本使用
  • 原文地址:https://www.cnblogs.com/575dsj/p/7601701.html
Copyright © 2011-2022 走看看