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可插拔实现的主要内容,如果未能解决你的问题,请参考以下文章
带你手写基于 Spring 的可插拔式 RPC 框架注册中心