Flask 使用类组织配置详情
作者:tigeriaf 发布时间:2023-06-15 02:31:30
在实际的项目中,我们一般都会建立三个环境:开发、测试和生产环境,这三种环境会使用不同的配置组合,为了能方便地切换配置,我们可以为不同的环境创建不同的配置文件,但是最方便的做法是在单个配置文件中使用 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
猜你喜欢
- 当然有其它工具可以做这件事,但如果客户不允许你在服务器乱装东西时这个脚本就会有用了。 代码如下:DECLARE @tbImportTable
- python用terminal输入参数import argparseif __name__ == '__main__':pa
- 先给大家介绍下Django打印出在数据库中执行的语句有时我们需要看models操作时对应的SQL语句,可以用如下方法查看---在django
- select * from table where DATE_FORMAT(FROM_UNIXTIME(createtime),'%
- 随着技术的不断升级,微软的王牌数据库SQL Server 2000正在逐渐淡出人们的视线,而新版的SQL Server 2005正成为企业和
- 以下代码是基于python3.5.0编写的import pandasfood_info = pandas.read_csv("fo
- 1、通过%格式表达式可以构建对象的格式化字符串输出。%表达式,由%分隔,左侧为格式字符串,由固定字符串和%开头的格式化样式组成,右侧为实际的
- 前言本文将教你如何使用YOLOV3对象检测器、OpenCV和Python实现对图像和视频流的检测。用到的文件有yolov3.weights、
- 自动追踪算法,在我们设计2D射击类游戏时经常会用到,这个听起来很高大上的东西,其实也并不是军事学的专利,在数学上解决的话需要去解微分方程,这
- 使用mybatis 从数据库中查询出date 类型字段,在java 类型中只看到了日期,没有看到时分秒,从数据库中是可以看到时分秒的。后来发
- 前言:本文介绍如何构建简单线性回归模型及计算其准确率,最后介绍如何持久化模型。线性回归模型线性回归表示发现函数使用线性组合表示输入变量。简单
- 有时候我们可能不知道一个用户的密码,但是又需要以这个用户做一些操作,又不能去修改掉这个用户的密码,这个时候,就可以利用一些小窍门,来完成操作
- 本文实例讲述了JS实现匀速与减速缓慢运动的动画效果。分享给大家供大家参考,具体如下:<!DOCTYPE html><htm
- 数组转换成切片a := [10]int{}fmt.Println(a) s1 := a[:10] //取前10个元素
- 视频教程教学地址:https://www.bilibili.com/video/BV18441117Hd?p=10x01路由from fla
- apply_async简介python在同一个线程中多次执行同一方法时,该方法执行耗时较长且每次执行过程及结果互不影响,如果只在主进程中执行
- 1 数据导出 python manage.py dumpdata不指定 appname 时默认为导出所有的apppython manage.
- asp之家注:也许很多人对网页设计中的,id和class和name的区别不是很清楚,好像觉得都可以使用,没什么不同。就我个人来讲,我的理解是
- 一、前言在学习深度学习会发现都比较爱用python这个argparse,虽然基本能理解,但没有仔细自己动手去写,因此这里写下来作为自己本人的
- 前言常见的图像任务通常需要把照片统一成相同的格式,所以此文章正是为了统一格式而生,常见的主要有cv2和PIL.Image的相关操作,照片格式