通过 TOML 文件配置 Python Flask RESTplus 应用程序

Configure Python Flask RESTplus app via TOML file

基于 Configuration Handling Documents for Flask the section of Configuring from Files 提到了使用文件配置应用程序的可能性,但是它没有提供示例或提及不是 Python 文件 的文件.

是否可以通过 config.ymlconfig.toml 等文件配置应用程序?

我当前的 flask 应用程序具有针对两个不同数据库的配置,并且由于我使用的是 flask-restplus,因此有针对 Swagger 文档的其他配置。

片段:

from flask import Flask

app = Flask(__name__)

def configure_app(flask_app):

    # MongoDB Setting
    flask_app.config['MONGO_URI'] = 'mongodb://user:password@mongo_db_endpoint:37018/myDB?authSource=admin'
    flask_app.config['MONGO_DBNAME'] = 'myDB'

    # InfluxDB Setting
    flask_app.config['INFLUXDB_HOST'] = 'my_influxdb_endpoint'
    flask_app.config['INFLUXDB_PORT'] = 8086
    flask_app.config['INFLUXDB_USER'] = 'influx_user'
    flask_app.config['INFLUXDB_PASSWORD'] = 'influx_password'
    flask_app.config['INFLUXDB_SSL'] =  True
    flask_app.config['INFLUXDB_VERIFY_SSL'] = False
    flask_app.config['INFLUXDB_DATABASE'] = 'IoTData'

    # Flask-Restplus Swagger Configuration
    flask_app.config['RESTPLUS_SWAGGER_UI_DOC_EXPANSION'] = 'list'
    flask_app.config['RESTPLUS_VALIDATE'] = True
    flask_app.config['RESTPLUS_MASK_SWAGGER'] = False
    flask_app.config['ERROR_404_HELP'] = False

def main():
    configure_app(app)

if __name__ == "__main__":

    main()

我想避免设置大量环境变量并希望使用 config.toml 文件配置它们?

这在 flask 中是如何实现的?

您可以使用 .cfg 文件和 from_envvar 来实现这一点。使用所有环境变量创建配置文件。

my_config.cfg

MONGO_URI=mongodb://user:password@mongo_db_endpoint:37018
..
..
ERROR_404_HELP=False

然后设置环境变量APP_ENVS=my_config.cfg。现在你需要做的就是使用 Flask 给出的from_envvars。

def configure_app(flask_app):
    flask_app.config.from_envvar('APP_ENVS')
    # configure any other things
    # register blue prints if you have any