Python实战-编写Web App-Day6-编写配置文件

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

<code> 
 
configs = {
    

'debug'

:

True

,

'db'

: {

'host'

:

'127.0.0.1'

,

'port'

:

3306

,

'user'

:

'root'

,

'password'

:

'password'

,

'db'

:

'woodman'

},

'session'

: {

'secret'

:

'woodman'

} }/<code>

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

<code> 
 
configs = {
    

'db'

: {

'host'

:

'127.0.0.1'

} }/<code>

应用程序读取配置文件需要优先从config_override.py读取。为了简化读取配置文件,可以把所有配置读取到统一的config.py中, 然后将之转化为可读的字典:

<code>

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)/<code>

注意:本地测试时不需要编写创建config_override.py


分享到:


相關文章: