Django-settings可插拔实现

Setting可插拔

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

文件目录

--about_settings
  --default
    --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()

总结

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

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

原文地址:https://www.cnblogs.com/zx125/p/11735505.html