网站搭建笔记精简版---廖雪峰WebApp实战-Day6:编写配置文件笔记

网站搭建笔记精简版-廖雪峰教程学习@[三川水祭]
仅作学习交流使用,将来的你会感谢现在拼命努力的自己!!!

我们在部署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
    }
}

参考博客
廖雪峰的官方网站
配置文件代码

猜你喜欢

转载自blog.csdn.net/suyiwei5993/article/details/83545636
今日推荐