Day 6 - 编写配置文件

本文详细介绍了在Python Web开发中如何编写配置文件,涵盖了配置文件的作用、常见格式及最佳实践,帮助开发者更好地管理和组织项目设置。
摘要由CSDN通过智能技术生成

通常,一个Web App在运行时都需要读取配置文件,比如数据库的 用户名口令等,在不同的环境中运行时,Web App可以通过读取不同的配置文件来获得正确的配置。
默认的配置文件应该完全符合本地开发环境,这样,无需任何设置,就可以立刻启动服务器。
创建一个默认配置文件 config_default.py
configs = {
	'db':{
		'host': 'localhost',
		'port': 3306,
		'user': 'root',
		'password': 'password',
		'db': 'awesome'
	},
	'session':{
		'secret': 'AwEsOmE'
	}
}
上述配置文件简单明了。但是,如果要部署到服务器时,通常需要修改数据库的host等信息,直接修改 config_default.py不是一个好办法,更好的方法是编写一个 config_override.py,用来覆盖某些默认设置:
configs = {
	'db':{
		'host': '192.168.0.100'
	}
}
最后,编写一个 config.py,用来整合所有配置文件:
import config_default

class Dict(dict):
	def __init__(self, names = (), values = (), **kw):
		super().__init__(**kw)
		for k, v in zip(names, values):
			self[k] = v
	def __getattr__(self, key):
		try:
			return self[key]
		except KeyError:
			raise AttributeError(r"'Dict' object has no attribute like '%s'" % key)
	def __setattr__(self, key, value):
		self[key] = value

def merge(defaults, override):
	r = {}
	for k, v in defaults.items():
		if k in override:
			if isinstance(v, dict):
				r[k] = merge(v, override[k]) # 若v是dict,继续迭代
			else:
				r[k] = override[k] # 否则,用新值覆盖默认值
		else:
			r[k] = v # 覆盖参数未定义时,仍使用默认参数
	return r

def toDict(configs):
	D = Dict()
	for k, v in configs.items():
		D[k] = toDict(v) if isinstance(v, dict) else v
	return D

configs = config_default.configs
try:
	import config_override
	configs = merge(configs, config_override.configs) # 获得组合后的configs,dict
except ImportError:
	pass
configs = toDict(configs) # 将configs组合成Dict类的实例,可以通过configs.k直接获取v
其中的 Dict类和 toDict函数,能让configs对象获取value可以像调用实例属性一样操作。
即获取value: configs[key] 等价 configs.key

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值