首页 > 其他 > 详细

手写配置文件实现两套配置文件的切换

时间:2019-03-12 12:54:34      阅读:106      评论:0      收藏:0      [点我收藏+]

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

这里我们仿照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,如此就完成了!!

 

手写配置文件实现两套配置文件的切换

原文:https://www.cnblogs.com/rongge95500/p/10515888.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!