Django-settings可插拔实现

Posted zx125

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-settings可插拔实现相关的知识,希望对你有一定的参考价值。

Setting可插拔

django暴露了一个可以给用户自定义配置的文件,优先使用用户配置的信息,而且必须要大写才有效

文件目录

--about_settings
  --conf
    --__init__.py
    --global_settings.py 默认配置文件
  --user
    --settings.py        用户配置文件
  --start.py             启动文件
  

start.py

import os
import sys

#将项目的根目录配置到模块搜索路径,提高兼容性
BASE_DIR = os.path.dirname(__file__)
sys.path.append(BASE_DIR)

#将用户的配置文件添加到系统环境变量,整个项目运行期间都可以获取
os.environ.setdefault('settings','user.settings')

#初始化项目配置文件
from default.conf import settings

#这个时候配置文件已经完成,打印查看信息
for setting in dir(settings):
    print(setting,getattr(settings,setting))

__init__.py

import os
import importlib
from default.conf import global_settings

class Settings():
    #初始化项目配置信息
    def __init__(self):
        #遍历默认的配置文件,并将配置信息添加到,配置对象当中
        for setting in dir(global_settings):
            #判断是否是大写
            if setting.isupper():
                #通过反射添加值
                setattr(self,setting,getattr(global_settings,setting))
        
        #获取用户的模块字符串
        mod = os.environ.get('settings')
        #importlib可以通过字符串进行导入模块
        module = importlib.import_module(mod)
        
        #遍历用户配置文件,并将配置信息添加到对象中,如果重复会覆盖之前系统的配置信息
        for setting in dir(module):
            if setting.isupper():
                setattr(self, setting, getattr(module, setting))
                
settings = Settings()

总结

关于两个配置文件,可以自己随意些,但是要注意大写

通过代码我们就可以更好的了解可插拔体现在哪里了,用户的配置文件可以随意更改位置,只要在启动文件,更改它的系统变量就好

以上是关于Django-settings可插拔实现的主要内容,如果未能解决你的问题,请参考以下文章

cmdb 可插拔式

带你手写基于 Spring 的可插拔式 RPC 框架注册中心

21 参考中间件,实现可插拔式设计

带你手写基于 Spring 的可插拔式 RPC 框架通信协议模块

Android如何实现可插拔配置?

子类化 Flask 可插拔视图以实现可扩展功能的最佳方式