本身用Flask作了一個博客(www.hbnnlove.sinaapp.com),以前苦於沒有對源碼解析的文檔,只能本身硬着頭皮看。如今我把我本身學習Flask源碼的收穫寫出來,也但願能給後續要學習FLask的人提供一點幫助。先從config提及。python
Flask主要經過三種method進行配置:json
def from_envvar(self, variable_name, silent=False): """Loads a configuration from an environment variable pointing to a configuration file. rv = os.environ.get(variable_name) if not rv: if silent: return False raise RuntimeError('The environment variable %r is not set ' 'and as such configuration could not be ' 'loaded. Set this variable and make it ' 'point to a configuration file' % variable_name) return self.from_pyfile(rv, silent=silent)
這段代碼,我想你們都能看得懂了。
二、from_pyfile
filename = os.path.join(self.root_path, filename) d = types.ModuleType('config') #d-----<module 'config' (built-in)> d.__file__ = filename try: with open(filename) as config_file: exec(compile(config_file.read(), filename, 'exec'), d.__dict__) except IOError as e: if silent and e.errno in (errno.ENOENT, errno.EISDIR): return False e.strerror = 'Unable to load configuration file (%s)' % e.strerror raise self.from_object(d) return True
從代碼中能夠看到,該種方式也是先讀取指定配置文件的config,而後寫入到變量中,最後經過from_object方法進行配置。
三、from_object
def from_object(self, obj): for key in dir(obj): if key.isupper(): self[key] = getattr(obj, key)
從代碼中能夠看出,config中設置的屬性值,變量必須都是大寫的,不然不會被添加到app的config中。
其實還有其餘的方法,如from_json等,但最經常使用的就是上面的三個。