Flask 使用类组织配置详情

作者:tigeriaf 时间:2023-06-15 02:31:30 

Flask 使用类组织配置详情

在实际的项目中,我们一般都会建立三个环境:开发、测试和生产环境,这三种环境会使用不同的配置组合,为了能方便地切换配置,我们可以为不同的环境创建不同的配置文件,但是最方便的做法是在单个配置文件中使用 Python 类来组织多个不同类别的配置。

例如下面是一个应用的配置文件 settings.py,它包含一个基本配置类 BaseConfig

还有其他特定的配置类:

  • 开发配置类 DevelopConfig

  • 测试配置类 TestCofig

  • 生产配置类 ProductConfig

这些特定配置类都继承自基本配置类。


import logging

import os

class BaseConfig(object):

DEBUG = True

SECRET_KEY = "qwertyuiop"

SQLALCHEMY_DATABASE_URI = "mysql://username:password@192.168.1.89:3306/app_db"

SQLALCHEMY_TRACK_MODIFICATIONS = False

REDIS_URL = "redis://:password@192.168.1.89:6379/0"

LEVEL_NAME = logging.DEBUG

class DevelopConfig(BaseConfig):

pass

class TestConfig(BaseConfig):

TESTING = True

SQLALCHEMY_DATABASE_URI = "mysql://username:password@192.168.1.123:3306/app_db"

class ProductConfig(BaseConfig):

DEBUG = False

LEVEL_NAME = logging.ERROR

SQLALCHEMY_DATABASE_URI = os.getenv("DATABASE_URL", "mysql://username:password@**.***.*.**:3306/app_db")

config_dict = {

"develop": DevelopConfig,

"product": ProductConfig,

"test": TestConfig

}

上述代码中,首先建立了一个基本配置类 BaseConfig 并初始化了一些配置信息,然后针对不同的环境建立了不同的类继承自 BaseConfig 类,重新设置了不同的配置信息,例如数据库 url,测试环境与开发环境不同,生产环境优先从环境变量中获取。

然后,创建了一个字典来存储配置名称和配置类的映射,相当于提供了一个配置信息的访问入口,可以根据指定的配置名称来获取对应的配置类。

编写好了配置文件,我们在应用主程序中创建 Flask 实例 app 时,就可以使用后app.config.from_object()方法加载配置,

例如:


from settings import config_dict

app = Flask(__name__)

config_name = os.getenv('CONFIG_NAME', 'develop')

app.config.from_object(config_dict[config_name])

首先从配置文件中导入配置名称和配置类的映射字典 config_dict,从环境变量 CONFIG_NAME 读取配置名称,然后通过app.config.from_object()方法加载指定配置信息,如果没有读取到 CONFIG_NAME,默认使用 develop,对应的配置类即 DevelopmentConfig

Flask 支持多种方式加载配置信息,除了上述的从 Python 类中加载,还支持 从 JSON 文件中加载、从 py 文件中加载等,app.config类提供了不同的方法来加载不同格式的配置文件,还是比较灵活的。

来源:https://juejin.cn/post/7033563216223420446

标签:Flask,类组织,配置
0
投稿

猜你喜欢

  • ASP利用TCPIP.DNS组件获得域名对应的IP

    2009-11-07 19:21:00
  • asp如何正确理解和使用Command、Connection和 Recordset三个对象?

    2010-06-28 18:23:00
  • js中string转int把String类型转化成int类型

    2024-05-03 15:30:11
  • python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)

    2022-01-27 13:05:08
  • Python实现的弹球小游戏示例

    2022-06-04 01:15:35
  • python实现员工管理系统

    2022-01-03 05:20:15
  • 浅谈Python由__dict__和dir()引发的一些思考

    2021-10-06 06:14:10
  • MySQL 8.0.18使用clone plugin重建MGR的实现

    2024-01-24 11:21:30
  • Python中类的初始化特殊方法

    2021-05-26 14:50:01
  • node.js实现BigPipe详解

    2024-05-05 09:22:17
  • 10个ASP网页制作技巧

    2007-09-24 13:12:00
  • 9种使用Chrome Firefox 自带调试工具调试javascript技巧

    2023-07-19 01:03:48
  • 详解如何使用nvm管理Node.js多版本

    2024-05-09 14:49:21
  • JS中==与===操作符的比较

    2024-04-17 10:10:23
  • python 多线程应用介绍

    2023-07-13 08:04:04
  • thinkPHP引入类的方法详解

    2024-06-05 09:45:55
  • 解决Python2.7中IDLE启动没有反应的问题

    2022-10-17 17:43:57
  • js传值后台中文出现乱码的解决方法

    2024-02-25 11:52:23
  • Python程序退出方式小结

    2021-12-21 19:29:55
  • MySQL备份与恢复之冷备(1)

    2024-01-26 13:37:50
  • asp之家 网络编程 m.aspxhome.com