zoukankan      html  css  js  c++  java
  • 手写配置文件实现两套配置文件的切换

    适用场景,当用户配置了自己的配置文件后,以用户的配置为准;用户不配置时,以系统的为准,避免程序因配置文件而出错!

    这里我们仿照Django的源码思想来实现!

    django源码

    一般我们导入的settings配置文件都是自己创建Django项目时自动生成的那个文件,这样我们就只能使用这一个文件中的配置

    from restful import settings    # restful 就是我们创建的项目名

    但其实在Django中还有一个叫settings的配置文件,它是一个全局的配置,当我们导入这个settings后,既可以使用Django的默认配置,还可以用自定义的配置,或覆盖Django的默认配置!

    from django.conf import settings 

    首先大致看一下Django的源码实现过程,点击settings后进到文件中,会看到它实例化了LazySettings这个类!

     再看Settings里,做了什么?

    这样简单理解后,我们自己也可手写一个配置文件,以后可以直接拷贝使用!

    自己手写

    首先,创建出目录结构,如下:

    OK!开始写代码实现该功能

    Setting类的__init__.py文件

    # -*- coding:utf-8 -*-
    import os
    import importlib
    from . import global_setting
    
    
    class Setting:
        def __init__(self):
            # 查找配置时先找系统配置
            # 循环系统的默认配置,将配置文件的变量赋值给self
            for settings in dir(global_setting):
                if settings.isupper():
                    setattr(self, settings, getattr(global_setting, settings))
    
            # 再找用户自定义的配置
            # 从环境变量取出用户自定义配置,并拿到路径里的py文件
            mod = importlib.import_module(os.environ.get('USER_SETTING'))
            # 循环用户自定义配置,将配置文件的变量赋值给self
            for settings in dir(mod):
                if settings.isupper():
                    setattr(self, settings, getattr(mod, settings))
    
    
    setting = Setting()

    test.py文件

    # -*- coding:utf-8 -*-
    import os
    
    # 在导入setting之前要将用户自定义配置文件添加到环境变量中
    os.environ.setdefault('USER_SETTING', 'user_setting.settings')
    if __name__ == '__main__':
      # 导入系统的配置文件 from conf import setting print(setting.DEBUG)

    global_setting.py文件

    DEBUG = False

    settings.py文件

    DEBUG = True

    执行test.py文件的结果,还在终端显示True,如果将settings.py中的DEBUG注释,在执行test.py终端将会显示False,如此就完成了!!

  • 相关阅读:
    FXML Stuffs (include and define)
    javaFX中解决填充(拉伸)问题
    <转>用 Java 技术创建 RESTful Web 服务
    webservice restful一个小例子
    《转》理解restful
    webservice之restlet实现
    WebService:CXF-SPRING 读书笔记
    PHP 单链表
    php 读xml的两种方式
    php输出金字塔
  • 原文地址:https://www.cnblogs.com/rongge95500/p/10515888.html
Copyright © 2011-2022 走看看