繁体   English   中英

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

[英]Configure Python Flask RESTplus app via TOML file

根据Flask 的配置处理文档, 从文件配置部分提到了使用文件配置应用程序的可能性,但是它没有提供示例或提及不是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来实现此目的。 使用所有环境变量创建配置文件。

我的配置文件

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

引用文档

从数据文件配置

也可以使用from_file()以您选择的格式从文件加载配置。 例如从 TOML 文件加载:

 import toml app.config.from_file("config.toml", load=toml.load)

或者来自 JSON 文件:

 import json app.config.from_file("config.json", load=json.load)

编辑:上述功能是 v2.0 的新功能。

链接到文档参考:

Class Flask.config ,方法from_file(filename, load, silent=False)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM