zoukankan      html  css  js  c++  java
  • Python实战网站开发:Day6编写配置文件

      编写配置文件

      一个网站应用运行时都需要读取配置文件,一般包括数据库的用户名、口令等。默认的配置文件应该符合本地开发环境,我们把默认的配置文件命名为config_default.py:

    # config_default.py
    
    configs = {
        'debug': True,
        'db': {
            'host': '127.0.0.1',
            'port': 3306,
            'user': 'www-data',
            'password': 'www-data',
            'db': 'awesome'
        },
        'session': {
            'secret': 'Awesome'
        }
    }
    

      当将网站部署到服务器时,通常需要修改数据库的host等信息,直接修改config_default.py不是一个好办法,更好的方法是编写一个config_override.py,用来覆盖某些默认设置:

    # config_override.py
    
    configs = {
        'db': {
            'host': '127.0.0.1'
        }
    }
    

      应用程序读取配置文件需要优先从config_override.py读取。为了简化读取配置文件,可以把所有配置读取到统一的config.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_override.py

  • 相关阅读:
    北京六环附近及往内的可驾驶道路网络(路网graph为连通图)
    OSM数据处理-python工具包
    小程序踩坑
    小程序基本配置
    JavaScript 基础(四):Array
    MYSQL--慎用group_concat()
    真正高效的SQLSERVER分页查询
    PhpStorm Git 操作
    linux 查看当前目录文件的大小
    @PostConstruct和@PreDestroy的使用说明
  • 原文地址:https://www.cnblogs.com/minseo/p/15612326.html
Copyright © 2011-2022 走看看