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类提供了不同的方法来加载不同格式的配置文件,还是比较灵活的。
到此这篇关于 Flask
使用类组织配置详情的文章就介绍到这了,更多相关 Flask 使用类组织配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
使用scipy.optimize的fsolve,root函数求解非线性方程问题
这篇文章主要介绍了使用scipy.optimize的fsolve,root函数求解非线性方程问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-12-12python中itertools模块zip_longest函数详解
itertools模块包含创建高效迭代器的函数,这些函数的返回值不是list,而是iterator(可迭代对象),可以用各种方式对数据执行循环操作,今天我们来详细探讨下zip_longest函数2018-06-06Python django使用多进程连接mysql错误的解决方法
这篇文章主要介绍了Python django使用多进程连接mysql错误的解决方法,详细的介绍了解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-10-10
最新评论