Flask配置管理

目录

Flask配置管理详情参见Flask文档中文翻译版《

配置管理》,以下内容均参考自该说明文档。

Flask在应用开始时载入配置,Flask对象使用config属性来操作配置,定义一些内置的配置变量,并支持添加自定义配置变量。

Config对象

Flask将配置保存在Config对象,从flask/config.py文件的定义中可以看到,Config对象就是一个字典。

只不过提供了多种填充内容的方法,包括从文件读取配置和从对象中获取配置等。
从环境变量指定的文件中读取配置

从文件中读取配置

从对象中读取配置

由此可见,Flask的Config只是对dict的简单扩展。
该文件中还有ConfigAttribute类,代表一个配置项。但Config对象使用dict而没有使用该对象,为什么要用一个特殊的配置项类呢?这与Flask对象中的配置项使用方式有关。

Flask类中的Config对象

Flask类中有config属性

make_config方法使用默认配置参数生成Config对象

默认配置参数定义在default_config对象中

Flask的配置项保存在config对象中。Flask将一些常用的配置项转移到Flask对象中,可以直接使用Flask对象操作。

等同于

而Flask类的debug属性就是一个ConfigAttribute类。下面看一下ConfigAttribute类的定义。

ConfigAttribute

关键在__get__方法和__set__方法,当ConfigAttribute对象作为另一个对象的属性时,就变为该对象config字典属性中的一个键。
Flask类中定义

debug就与config字典中的’DEBUG’键对应,从默认参数default_config中可以看到debug默认值为False.

后记

Flask使用一种简单的方式保存配置信息,将配置管理留给开发人员,让开发人员自己通过不同文件或不同对象来区别不同的运行环境。当前我正在考虑如何有效地区分开发和生产环境,并如何将两种环境有机结合到一起。Flask处理配置的方式可以考虑一下,将配置放在外部的某几个文件中,启动应用是按某种条件加载需要的配置文件。
开发和生产环境结合不仅仅是参数配置的问题,还有更深层次的东西有待研究。