通过配置加载ini文件的flask扩展名
Flask-INIConfig的Python项目详细描述
目录
Overview
Flask-INIConfig是一个Flask扩展,它将两个附加方法from_inifile和from_inifile_sections添加到应用程序的Flask.config配置实例中。这允许您将ini文件或节从ini文件直接加载到config对象中。
Usage
Basic Usage
您可以通过调用扩展的构造函数来初始化它:
fromflaskimportFlaskfromflask.ext.iniconfigimportINIConfigapp=Flask(__name__)INIConfig(app)# or use the init_app form# INIConfig().init_app(app)app.config.from_inifile('/path/to/file.ini')property=(app.config.get('section')or{}).get('property')
重要
- 属性名和节名区分大小写。
- 通常,configparser会将设置和属性名规范化为小写,但是对于扩展所使用的实例,这将被关闭。
^{tt1}$
当在ini文件中使用from_inifile节时,它们是config对象中的单个属性。例如,如果您有以下内容:
[section]a_property=1
您可以使用:
app.config.from_inifile('/path/to/file.ini')
您可以通过以下方式访问:
section=current_app.config.get('section')property=section['a_property']
从v0.0.8开始,如果您向from_inifile提供一个名为objectify的标志,它将把节作为实例变量添加到配置对象中。然后您可以使用:
app.config.from_inifile('/path/to/file.ini',objectify=True)
它将允许您以:
section=current_app.config.sectionproperty=section['a_property']
重要
- 关于节名,请非常小心,以免与内置成员发生冲突,因为app.config只是一个dict。
- 这些节实例变量是普通字典。它们本身不是对象。
有一个专门用于Flask应用程序的部分,名为flask,可用于指定应用程序属性。因此,如果您有以下信息:
[flask]DEBUG=1
您可以使用current_app.config['DEBUG'],而不必指定节。烧瓶部分中的所有属性名称都转换为大写,就像from_inifile_sections中那样,但仅适用于烧瓶部分。
^{tt2}$
使用from_inifile_sections时,只有相关节和flask节(如果存在)从ini文件加载。另一个主要区别是,所有属性都附加到app.config对象上,而不是app.config具有节名称的属性。
此外,所有属性名都转换为大写,因为大多数扩展名和flask的内部configuration properties都是大写的。
唯一的异常是当您向此方法提供preserve_case标志时。当给定此值时,将保留所有非烧瓶选项的大小写。烧瓶选项仍将转换为大写。这允许您将sqlalchemy的engine_from_config直接用于config对象。
如果您有一个ini文件,其中包含开发、登台、生产和测试设置,则这非常有用。您只能加载所需的文件,然后烧瓶可以直接使用这些文件。
例如,如果您有以下物品:
[flask]DEBUG=1[common]a=1b=0[dev]b=2[prod]b=3
您可以使用:
app.config.from_inifile_sections('/path/to/file.ini',['common','dev'])
将属性A和B添加到app.config。
注意
此特定方法不加载未指定的节。在r4372a8e之前,情况并非如此,有时会导致插值出现问题。
Customizing SafeConfigParser
如果要自定义内部SafeConfigParser的工作方式,可以使用RawConfigParser构造函数文档中指定的参数。
例如:
INIConfig(app,defaults={...},dict_type=OrderedDict,allow_no_value=True)
Implementation Details
实现扩展的基类是从SafeConfigParser派生的,用于加载ini文件。因此,您将获得内置的解析和插值capa分析器的功能。
因为SafeConfigParser不会自动将值强制为适当的类型,Flask-INIConfig会尽量为您执行一些操作。以下转换尝试按优先顺序进行:
- int
- float
- boolean
- list, dict or tuple (using ast.literal_eval)
注意
警告
扩展不尝试将值强制为已在应用程序配置中指定的键的类型。因此,如果要重写ini文件中的配置属性,则需要注意实际类型。