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   使用类组织配置内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Flask 入门系列 Cookie与session的介绍

    目录 一.Cookie的使用 1.什么是Cookie 2.在Flask中使用Cookie 二.session的使用 1.什么是session 2.Flask中的session对象 3.在Flask中使用session 一.Cookie的使用 1.什么是Cookie 我们都知道,HTTP 协议是无状态的,也就是说,在一次请求响应结束后,服务端不会保留任何对方状态的信息,对于某些需要保留的信息,可以通过 Cookie 技术来完成,通过在请求和响应报文中添加 Cookie 数据来保存客户端的状态信息.

  • Flask 的路由Route详情

    目录 1.路由 2.视图函数绑定多个url 3.动态url 4.HTTP请求方法设置 5.url构建 前言: 在上一篇Flask 入门Web 微框架Hello Flask中,我们用 Flask 框架写了一个 Hello Flask 应用程序,我们了解到 Flask 框架简洁高效.可以快速上手,接下来将对 Flask 框架的各项功能详细的介绍一下,本篇文章介绍的是 Flask 的路由(Route). 1.路由 所谓路由,就是处理请求url和函数之间关系的程序,一个Web应用不同的路径会有不同的处理

  • Flask 数据库迁移详情

    目录 1.使用 Flask-Migrate 实现数据库迁移 2.Flask-Migrate的使用 2.1 数据库的迁移过程 2.1.1 创建迁移环境 2.1.2 生成迁移脚本 2.1.3 更新数据库 3.总结 1.使用 Flask-Migrate 实现数据库迁移 db.create_all()不会重新创建表或是更新表,需要先使用db.drop_all()删除数据库中所有的表之后再调用db.create_all()才能重新创建表,但是这样的话,原来表中的数据就都被删除了,这肯定是不行的,这时就出现

  • Flask  request 对象详情

    目录 1.request请求对象 1.1request请求对象的使用 前言: 一个完整的 HTTP 请求,包括客户端向服务端发送的 Request 请求和服务器端发送的 Response 响应.为了能方便的访问获取请求及响应报文信息,Flask 框架提供了一些内建对象,下面就来说一下 Flask 针对请求提供的内建对象request. 1.request请求对象 request请求对象封装了从客户端发来的请求报文信息,我们能从request对象上获取请求报文中的所有数据. 其大部分功能是由依赖包

  • 关于Flask 上下文详细介绍

    目录 1.上下文概念 2.Flask中的上下文 2.1请求上下文 2.2应用上下文 1.上下文概念 上下文,说白了就是所谓的语境,就是语言环境.比如单独拎出来一篇文章的某一句话,我们可能不能理解它的意思,但是通过这句话所处的语言环境,再结合它前后的语句,就能很轻易的理解. 我们可以把上下文理解为当前环境的快照,是一个用来保存状态的对象.在代码执行的某个时刻,根据上下文的代码逻辑,可以决定在当前时刻下使用到的环境变量等. 2.Flask中的上下文 Flask 中有两种上下文,应用上下文(appli

  • Flask-蓝图 blueprint详情

    目录 1.蓝图的定义 1.1使用蓝图 前言: 我们的应用经常会有很多小模块,比如用户模块.后台管理模块等,虽然这些模块都在同一个应用中,但是功能大不相同,把他们放在同一个文件中,显得十分杂乱,不便于管理维护,那么有没有什么方法可以将模块分开管理呢?是有的!Flask 蓝图(Blueprint),它可以模块化管理路由,使用蓝图可以把不同模块的视图函数写在不同的py文件中,在主视图中导入分路由视图的模块,并注册蓝图对象,降低各个功能模块的耦合度使程序结构更加简单.清晰. Flask使用Bluepri

  • Flask  请求钩子的实现

    在 Web 应用中,有时需要在响应请求前或者响应请求后做一些处理,为了让每个视图函数避免编写重复功能的代码,Flask 提供了请求钩子,它们可以用来注册在请求处理的不同阶段执行的处理函数,我们就可以轻易的对请求进行预处理和后处理. Flask 常用请求钩子如下: before_first_request:在处理第一个请求之前运行 before_request:在每次请求之前运行,如果没有未处理的异常抛出,会在每个请求结束后运行 after_request:如果没有未处理的异常抛出,在每次请求结束

  • 关于Flask 视图介绍

    目录 2.类视图 2.1 标准类视图 2.1.1 基于方法的视图 1.视图函数 之前的文章说过,在 Flask 中路由是请求的 url 与处理函数之间的映射,使用app.route装饰器将处理函数和 url 绑定,路由绑定的处理函数就被成为视图函数. @app.route('/user/<name>') def hello_user(name): return 'Hello {}!'.format(name) 上面的hello_user()函数就是一个简单的视图函数. 当然我们也可以不使用ap

  • Flask 数据库集成的介绍

    目录 1.使用Flask-SQLAlchemy管理数据库 1.1 配置Flask_SQLAlchemy 1.2 定义数据库模型 1.3 创建数据库和表 1.4 数据库操作 1.4.1 Create 1.4.2 Read 1.4.3 Update 1.4.4 Delete 1.4.5 在视图函数里操作数据库 前言: 数据库是大多数 Web 应用的基础设施,只要想把数据存储下来,就离不开数据库,下面将一起学习一下如何给 Flask 应用添加数据库支持. 1.使用Flask-SQLAlchemy管理数

  • Flask  response 对象详情

    在 Flask 中,响应使用 Response 对象表示,响应报文中的大部分内容由服务器处理,一般情况下,我们只负责返回主体内容即可.在之前的文章中,我们了解到 Flask 会先匹配请求 url 的路由,调用对应的视图函数,视图函数的返回值构成了响应报文的主体内容. 如果视图函数只返回一个元素的话,Flask 会创建 Response 对象,Response将该返回值作为主体内容,状态码默认为200,MIME 的类型为text/html,然后返回该 Response 对象. 其实视图函数可以返回

随机推荐