使用类组织配置

在实际需求中,我们往往需要不同的配置组合。例如,开发用的配置,测试用的配置,生产环境用的配置。为了能方便地在这些配置中切换,你可以把配置文件升级为包,然后为这些使用场景分别创建不同的配置文件,但是最方便的做法是在单个配置文件中使用python类来组织多个不同类别的配置。

下面的代码是personalBlog的配置文件,现在它包含一个基本配置类(BaseConfig),还有其他特定的配置类,即测试配置类(TestingConfig)、开发配置类(DevelopmentConfig)和生产配置类(ProductionConfig),这些特定配置类都继承自基本配置类。

personalBlog/setting.py: 使用python类组织配置

import os
import sys basedir = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) #SQLite URI compatible
WIN = sys.platform.startswith('win')
if WIN:
prefix = 'sqlite:///'
else:
prefix = 'sqlite:////' class BaseConfig(object):
SECRET_KEY = os.getenv('SECRET_KEY', 'secret string') DEBUG_TB_INTERCREPT_REDIRECTS = False SQLALCHEMY_TRACK_MODIFICATIONS = False MAIL_SERVER = os.getenv('MAIL_SERVER')
MAIL_PORT = 465
MAIL_USE_SSL = True
MAIL_USERNAME = os.getenv('MAIL_USERNAME')
MAIL_PASSWORD = os.getenv('MAIL_PASSWORD')
MAIL_DEFAULT_SENDER = ('persnalBlog Admin', MAIL_USERNAME) PERSONALBLOG_EMAIL = os.getenv('PERSOANLBLOG_EMAIL')
PERSONALBLOG_POST_PER_PAGE = 10
PERSONALBLOG_MAMAGE_POST_PER_PAGE = 15
PERSONALBLOG_COMMENT_PER_PAGE = 15 class DevelopmentConfig(BaseConfig):
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data-dev.db') class TestingConfig(BaseConfig):
TESTING = True
WTF_CSRF_ENABLED = False
SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:' # in-memory database class ProductionConfig(BaseConfig):
SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL', 'sqlite:///' + os.path.join(basedir, 'data.db')) config = {
'development': DevelopmentConfig,
'testing': TestingConfig,
'production': ProductionConfig
}

在新版本的配置中,我们为不同的使用场景设置了不同的数据库URL,避免互相干扰。生产环境下优先从环境变量DATABASE_URL读取,如果没有获取到则使用SQLite,文件名为data.db(在实际生产中我们通常会使用更健壮的DBMS,这里只是示例),在开发时用的数据库文件名为data-dev.db,而测试时的配置则使用SQLite内存型数据库卡。为了获取数据库文件的路径,我们使用os模块的方法创建了一个定位到项目根目录的basedir变量,最终的绝对路径通过os.path模块的方法基于当前脚本的特殊变量__file__获取。

在配置文件的底部,我们创建了一个存储配置名称和对应配置类的字典,用于在创建程序实例时通过配置名称来获取对应的配置类。现在我们在创建程序实例后使用app.config.from_object()方法加载配置,传入配置类:

from personalBlog.settings import config

app = Flask('personalBlog')
config_name = os.getenv('FLASK_CONFIG', 'development')
app.config.from_object(config[config_name])

我们首先从配置文件中导入匹配配置名到配置类的config字典。为了方便修改配置类型,配置名称会先从环境变量FLASK_CONFIG中导入,从环境变量加载配置可以方便地在不改动代码的情况下切换配置。这个值可以在.flaskenv文件中设置,如果没有获取到,则使用默认值development,对应的配置类即DevelopmentConfig。

Flask并不限制你存储和加载配置的方式,可以使用JSON文件存储配置,然后使用app.config.from_json()方法导入;也可以使用INI风格的配置文件,然后自己手动导入。

在后续的示例中,我们都使用python类来组织配置。包含敏感信息的配置会从环境变量获取,这些配置值存储在.env文件中。当安装了python-dotenv并使用Flask内置的run命令启动程序时,.env文件的环境变量会被自动设置。

最新文章

  1. 易用BPM时代,企业如何轻松驾驭H3?
  2. 工欲善其事-Eclipse设置
  3. AutoMapper搬运工之自定义类型转换
  4. selenium移动div里面的滚动条,操作弹出对话框
  5. Android 使用 LruCache 缓存图片
  6. Oracle 12c SYSAUX表空间不足处理-清理audsys.cli_swp$a9b5f52c$1$1表
  7. C#设计模式(8)——桥接模式(Bridge Pattern)
  8. 查看linux [Fedora] 系统信息
  9. PL/SQL显示行号和高亮当前行
  10. 【Asp.Net WebFrom】分页
  11. POJ 2151 Check the difficulty of problems (概率dp)
  12. KMP应用http://acm.hdu.edu.cn/showproblem.php?pid=2594
  13. 分享8款绚丽的HTML5/jQuery特效插件
  14. win7 64位 python3.4&opencv3.0配置安装
  15. CSS照片墙
  16. Jmeter之性能测试基础
  17. java 泛型基础问题汇总
  18. 【BZOJ4872】分手是祝愿(动态规划,数学期望)
  19. 三 Django模型层之Meta
  20. centOS 6.5安装python和nginx

热门文章

  1. android开发环境完整搭建
  2. [转]Python-__builtin__与__builtins__的区别与关系(超详细,经典)
  3. Spring.net 表达式解析ExpressionEvaluator
  4. 为 pycharm 修改 Theme & Color
  5. jquery 常用工具方法
  6. 用Docker搭建WordPress
  7. 在Linux上编译Hadoop-2.4.0
  8. 编写高质量代码改善C#程序的157个建议——建议148:不重复代码
  9. mongoexport遭遇Authentication failed
  10. XE10开发的APP对于苹果IPV6上架要求的处理(DelphiTeacher)