使用类组织配置

在实际需求中,我们往往需要不同的配置组合。例如,开发用的配置,测试用的配置,生产环境用的配置。为了能方便地在这些配置中切换,你可以把配置文件升级为包,然后为这些使用场景分别创建不同的配置文件,但是最方便的做法是在单个配置文件中使用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文件的环境变量会被自动设置。

flask实战-个人博客-使用类组织配置的更多相关文章

  1. flask实战-个人博客-虚拟环境、项目结构

    个人博客 博客是典型的CMS(Content Management system,内容管理系统),通常由两部分组成:一部分是博客前台,用来展示开放给所有用户的博客内容:另一部分是博客后台,这部分内容仅 ...

  2. flask实战-个人博客-使用蓝本模块化程序

    使用蓝本模块化程序 实例化flask提供的blueprint类就创建一个蓝本实例.像程序实例一样,我们可以为蓝本实例注册路由.错误处理函数.上下文处理函数,请求处理函数,甚至是单独的静态文件文件夹和模 ...

  3. flask实战-个人博客-编写博客前台

    编写博客前台 博客前台需要开放给所有用户,这里包括显示文章列表.博客信息.文章内容和评论等功能功能. 分页显示文章列表 为了在主页显示文章列表,我们要先在渲染主页模板的index视图的数据库中获取所有 ...

  4. flask实战-个人博客-模板 --

    模板 personalBlog采用典型的博客布局,左侧三分之二为主体,显示文章列表.正文:右侧三分之一为边栏,显示分为类列表.社交链接等.现在的工作是将HTML文件加工为模板,并创建对应的表单类,在模 ...

  5. flask实战-个人博客-电子邮件支持

    电子邮件支持 因为博客要支持评论,所以我们需要在文章有了新评论后发邮件通知管理员.而且,当管理员回复了读者的评论后,也需要发送邮件提醒读者. 为了方便读者使用示例程序,personalBlog中仍然使 ...

  6. flask实战-个人博客-表单

    表单 下面我们来编写所有表单类,personalBlog中主要包含下面这些表单: 登录表单: 文章表单: 评论表单: 博客设置表单: 这里仅介绍登录表单.文章表单.分类表单和评论表单,其他的表单在实现 ...

  7. flask实战-个人博客-数据库-生成虚拟数据 --

    3.生成虚拟数据 为了方便编写程序前台和后台功能,我们在创建数据库模型后就编写生成虚拟数据的函数. 1)管理员 用于生成虚拟管理员信息的fake_admin()函数如下所示: personalBlog ...

  8. flask实战-个人博客-程序骨架、创建数据库模型、临接列表关系 --

    编写程序骨架 personalBlog的功能主要分为三部分:博客前台.用户认证.博客后台,其中包含的功能点如下图所示: 数据库 personalBlog一共需要使用四张表,分别存储管理员(Admin) ...

  9. flask实战-个人博客-使用工厂函数创建程序实例 --

    使用工厂函数创建程序实例 使用蓝本还有一个重要的好处,那就是允许使用工厂函数来创建程序实例.在OOP(Object-Oriented Programming,面向对象编程)中,工厂(factory)是 ...

随机推荐

  1. RedHat 6 下配置网卡IP地址,Virtual Linux下配置网卡IP

    经常用到,自己Mark一下,顺带给需要的人参考. 1.配置文件修改 $ vi /etc/sysconfig/network-scripts/ifcfg-eth0 内容: DEVICE="et ...

  2. crm第一天

    课程由1-7组成 自己实现的代码: 教程:

  3. MyBatis 3(中文版) 第四章 使用注解配置SQL映射器

    本章将涵盖以下话题: l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l ...

  4. 【转载】Zookeeper 安装和配置

    [转载原文链接 ] Zookeeper的安装和配置十分简单, 既可以配置成单机模式, 也可以配置成集群模式. 下面将分别进行介绍. 单机模式 点击这里下载zookeeper的安装包之后, 解压到合适目 ...

  5. react+webpack基础学习配置

    最近学习react,公司的项目是使用create-react-app来搭建的,而我想重新使用node+mysql+react来搭建一个新的博客. 今天尝试从零开始搭建一个webpack+react项目 ...

  6. 【Linux】Vim编辑器

    本文基于Debian 1.vim使用简介 1.1vim安装 使用apt安装vim即可: sudo apt-get install vim 1.2 vim编辑器的模式 vim编辑器分为命令模式和编辑模式 ...

  7. Using Lucene's new QueryParser framework in Solr

    Sometime back, I described how I built (among other things) a custom Solr QParser plugin to handle P ...

  8. redis整理の配置

    redis有一个很强大也很重要的配置文件redis.conf.此文件可以随服务启动,为服务配置各种不同场景所需的参数: daemonize: 默认情况下,redis 不是在后台运行的,如果需要在后台运 ...

  9. cocos2dx conversion to dalvik format failed

    标题的这个问题不知道有没有朋友遇到过,我就被害惨了一个晚上加一个早上的时间了. 可能其他朋友很多搜conversion to dalvik format failed 都会看到一样的答案,我是针对做c ...

  10. pageadmin CMS Sql新建数据库和用户名教程

    用pageadmin网站制作如何Sql新建数据库和用户名 sql server软件安装完毕后,需要新建一个数据库用来作为网站的数据库. 1.打开sql管理界面,如图所示,找到数据库,右键单击数据库,选 ...