• 03-Flask-工程配置加载方式



    前言

    • 本篇来学习下Flake工程配置加载方式

    配置对象中加载

    • 应用场景:作为默认配置写在代码中
    # -*- coding: utf-8 -*-
    # @Time    : 2023/9/2
    # @Author  : 大海
    from flask import Flask
    
    
    class DefaultConfig(object):
        """默认配置"""
    
        MYSQL_HOST = '192.168.66.66'
    
    
    app = Flask(__name__)
    
    # 设置配置对象方式读取配置
    app.config.from_object(DefaultConfig)
    
    
    @app.route('/')
    def index():
        # 读取配置,相当于字典中取值
        mysql_host = app.config.get('MYSQL_HOST')
        # mysql_host = app.config['MYSQL_HOST']
        print(mysql_host)
        return 'Hello 大海!'
    
    
    if __name__ == '__main__':
        app.run()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    配置文件中加载

    • 应用场景:项目中使用固定的配置文件
    # setting.py
    # -*- coding: utf-8 -*-
    # @Time    : 2023/9/2
    # @Author  : 大海
    
    MYSQL_HOST = '192.168.88.88'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # -*- coding: utf-8 -*-
    # @Time    : 2023/9/2
    # @Author  : 大海
    
    from flask import Flask
    
    
    app = Flask(__name__)
    
    # 设置配置文件方式加载配置
    app.config.from_pyfile('setting.py')
    
    
    @app.route('/')
    def index():
        # 读取配置,相当于字典中取值
        mysql_host = app.config.get('MYSQL_HOST')
        # mysql_host = app.config['MYSQL_HOST']
        print(mysql_host)
        return 'Hello 大海!配置文件方式加载配置。'
    
    
    if __name__ == '__main__':
        app.run()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    环境变量中加载

    • 先设置环境变量
    # export 变量名=配置文件名   Linux系统环境中使用
    export PROJECT_SETTING=setting.py
    
    • 1
    • 2
    # -*- coding: utf-8 -*-
    # @Time    : 2023/9/2
    # @Author  : 大海
    
    from flask import Flask
    
    app = Flask(__name__)
    
    # 设置环境变量方式加载配置
    app.config.from_envvar('PROJECT_SETTING', silent=True)
    
    
    @app.route('/')
    def index():
        # 读取配置,相当于字典中取值
        mysql_host = app.config.get('MYSQL_HOST')
        # mysql_host = app.config['MYSQL_HOST']
        print(mysql_host)  
        return 'Hello 大海!环境变量方式加载配置。'
    
    
    if __name__ == '__main__':
        app.run()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    silent 参数说明:

    1. Flase:没找到变量值时,报错通知,默认为Flase
    2. True:没找到变量值时也正常运行下去

    三种配置方式优缺点

    1. 配置对象
      • 优点:继承,可复用
      • 缺点:敏感数据暴露代码中
    2. 配置文件
      • 优点:独立配置文件,保护敏感数据
      • 缺点:不能继承,文件路径固定,不灵活
    3. 环境变量
      • 优点:独立配置文件,保护敏感数据,文件路径不固定,灵活
      • 缺点: 不方便,要记得设置环境变量

    工厂模式创建Flask app

    # -*- coding: utf-8 -*-
    # @Time    : 2023/9/2
    # @Author  : 大海
    
    from flask import Flask
    
    
    class DefaultConfig(object):
        """默认配置"""
    
        MYSQL_HOST = '192.168.66.66'
    
    
    def create_flask_app(config):
        app = Flask(__name__)
    
        # 设置配置对象方式读取配置
        app.config.from_object(config)
        # 设置环境变量方式加载配置
        app.config.from_envvar('PROJECT_SETTING', silent=True)
    
        return app
    
    
    app = create_flask_app(DefaultConfig)
    
    
    @app.route('/')
    def index():
        # 读取配置,相当于字典中取值
        mysql_host = app.config.get('MYSQL_HOST')
        # mysql_host = app.config['MYSQL_HOST']
        print(mysql_host)
        return 'Hello 大海!'
    
    
    if __name__ == '__main__':
        app.run()
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
  • 相关阅读:
    Linux C编译器从零开发二
    yolov5+shufflenet轻量化目标检测
    flink学习知识点小结
    C语言:指针的应用
    Abnova LiquidCell-负富集细胞分离和回收系统
    【zabbix Java开发教程】docker部署zabbix及api获取实战教程
    uniapp应用内苹果支付怎么写?
    软件架构模式之第三章:分层架构
    zlog 日志库使用说明,看完不懂打我...
    windows和linux可以共用的端口连通性是否丢包测试工具paping
  • 原文地址:https://blog.csdn.net/IT_heima/article/details/132635220