网站搭建笔记精简版-廖雪峰教程学习@[三川水祭]
仅作学习交流使用,将来的你会感谢现在拼命努力的自己!!!
我们在部署webapp时候需要读取配置文件,配置文件中包含主机名、密码和端口等配置信息。廖老师在第6天的代码中编写了三个文件,分别是config_default.py、config_override.py和config.py。其中config_default.py
文件中存放的是开发环境的标准配置,config_override.py
存放的是部署到服务器时,需要修改数据库的host等信息,config.py
存放是将所有配置文件统一读取的代码。接下来附代码解释。
config.py
代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
Configuration
'''
__author__ = 'Michael Liao'
# 直接导入config_default.py中的通用配置信息
import config_default
class Dict(dict):
'''
Simple dict but support access as x.y style.
'''
def __init__(self, names=(), values=(), **kw):
super(Dict, self).__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 '%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])
else:
r[k] = override[k]
else:
r[k] = v
return r
# 将配置文件返回为字典
def toDict(d):
D = Dict()
for k, v in d.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)
except ImportError:
pass
configs = toDict(configs)
config_default.py
代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
Default configurations.
'''
__author__ = 'Michael Liao'
configs = {
'debug': True,
'db': {
'host': '127.0.0.1',
'port': 3306,
'user': 'www', #改为自己的用户名
'password': 'www', #改为自己的密码
'db': 'awesome' #数据库的名字
},
'session': {
'secret': 'Awesome'
}
}
config_override.py
代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
Override configurations.
'''
__author__ = 'Michael Liao'
configs = {
'db': {
'host': '127.0.0.1' #本机的ip
}
}