首页 > 编程语言 >flask应用程序配置

flask应用程序配置

时间:2023-10-04 12:22:57浏览次数:43  
标签:__ 配置文件 flask True app 配置 应用程序 config

flask中配置app的配置有几种方式,不同的场景适合用不同的方式。

配置定义方式如下:(注意:这几种方式都时可以混用的)

  • 直接调用app.config来设置。
app.config["SECRET_KEY"] = "sjhiq1y198798su656s#$#$%"
  • 从类对象中加载配置文件(优先级高于app.config直接设置)
app.config.from_object(类名)
  • 从环境变量中加载配置(优先级最高,会覆盖上面2种方式的同名配置项)
app.config.from_envvar("环境变量名", silent=Flase|True)
# 环境变量名: 值一般都是配置文件的相对路径或者绝对路径,文件中配置项一行一个,K=V形式。
# silent: 如果环境变量不存在是否抛出异常
  • 从py文件中加载配置(这个很少用...py文件中配置项的格式也是K=V形式)
app.config.from_pyfile("py文件")

实际开发中,多使用前3种方式来组合设置app的配置项。

直接调用app.config设置

适用场景:少量配置时可以这样操作

from flask import Flask

app = Flask(__name__)

# 少量信息可以直接app.config来设置(本质就是操作字典)
app.config["SECRET_KEY"] = "asdasdjhqkwehkjzxahkjabdmnasda"

@app.route('/demo1')
def demo1():
    print(f"{app.secret_key=}")
    return "config test001"


if __name__ == '__main__':
    app.run(debug=True)

从类对象中加载app配置

使用场景:

开发、生产、测试环境各不相同,通过类的方式取定义每个环境下的专属配置,方便修改和使用。

并且,这些环境中,可能会有相同的配置,这时候可以采用面向对象的封装思想。

from flask import Flask

app = Flask(__name__)

# 少量信息可以直接app.config来设置(本质就是在操作python字典)
app.config["SECRET_KEY"] = "asdasdjhqkwehkjzxahkjabdmnasda"
# 这两种方式都可以,因为一个是json类,一个是json类的具体实例。修改对应的类属性、实例属性,所以都有效果
app.json_provider_class.ensure_ascii = False
app.json.ensure_ascii = False

"""
定义一个基础的配置文件类.
    其他的配置文件类去继承这个基础的配置文件类

"""
class BaseConfiguration():
    """配置文件基类, 定义不同环境下相同的配置项"""
    SECRET_KEY = "SADAJDHKJSHDA"


class DEVConfiguration(BaseConfiguration):
    """
    开发环境配置
    """
    DEBUG = True  # 开发环境DEBUG肯定是True呀
    REDIS_MASTER_CLIENT = "192.168.1.1"


class ProdConfiguration(BaseConfiguration):
    """
    生产环境配置
    """
    DEBUG = False
    REDIS_MASTER_CLIENT = "172.10.155.1"


# 定义一个函数用于获取并返回配置
def config4env(want):
    # 使用字典将配置类一一映射。
    config_dict = {
        "dev": DEVConfiguration,
        "prod": ProdConfiguration
    }
    # 不用字典的get是因为,如果没有获取到正确的配置,希望直接抛出异常。而不是返回None
    return config_dict[want]

# 使用app.config.from_object(类对象)来导入配置
app.config.from_object(config4env("dev"))



@app.route('/demo1')
def demo1():
    print(f"{app.secret_key=}")
    print(f"{app.config.get('REDIS_MASTER_CLIENT')=}")
    return "config test001"



if __name__ == '__main__':
    app.run(debug=True)

从环境变量中加载配置

配置文件:secret_config.py(名字自己定义,叫什么都可以)

# 假设只有一个配置项,我不希望别人知道我的secret_key
SECRET_KEY = "888999888999aaaa"
from flask import Flask

class BaseConfiguration():
    SECRET_KEY = "SADAJDHKJSHDA"


class DEVConfiguration(BaseConfiguration):
    """
    开发环境配置
    """
    DEBUG = True
    REDIS_MASTER_CLIENT = "192.168.1.1"


class ProdConfiguration(BaseConfiguration):
    """
    生产环境配置
    """
    DEBUG = False
    REDIS_MASTER_CLIENT = "172.10.155.1"


def config4env(want):
    config_dict = {
        "dev": DEVConfiguration,
        "prod": ProdConfiguration
    }
    # 不用字典的get是因为,如果没有获取到正确的配置,希望直接抛出异常。
    return config_dict[want]


# 使用app.config.from_object(类对象)来导入配置
app.config.from_object(config4env("dev"))

# 从环境变量中读取配置文件
app.config.from_envvar("SECRET_CONFIG", silent=False)


@app.route('/demo1')
def demo1():
    # 因为环境变量的优先级高,会覆盖从类对象中加载的相同配置项
    # 所以这里打印的是888999888999aaaa,而不是SADAJDHKJSHDA
    print(f"{app.secret_key=}")


if __name__ == '__main__':
    app.run(debug=True)

标签:__,配置文件,flask,True,app,配置,应用程序,config
From: https://www.cnblogs.com/juelian/p/17742129.html

相关文章

  • flask蓝图(这玩意就是django的子应用)
    蓝图的概念类似django的子应用,作用就是分模块开发,有关联的都放在一起。蓝图的创建步骤:新建一个包(一个包就是一个模块、等同于一个子应用)在包的__init__.py中创建蓝图对象。蓝图对象所有的参数和功能与Flask()对象类似。见:user下的__init__.py和views.py在app中注册蓝......
  • flask上下文、g变量、current_app
    在flask中的上下文分为两种:请求上下文(requestcontext)也就是和请求相关的上下文,记录一些请求相关的数据。包含:1、request请求对象2、session会话应用上下文(appcontext)记录一些和flask的应用(app=Flask(name))的上下文数据,主要包含:**1、current_app**在项目其它......
  • 手动开发-简单的Spring基于注解配置的程序--源码解析
    在前文中《手动开发-简单的Spring基于XML配置的程序--源码解析》,我们是从XML配置文件中去读取bean对象信息,再在自己设计的容器中进行初始化,属性注入,最后通过getBean()方法进行返回。这篇文章,我们将基于注解的视角,实现简单的Spring容器。在这里我们还将做一些改动,前文我们是通过xml......
  • 4.Maven配置本地仓库,阿里云远程仓库
    1.配置本地仓库Editmaven安装目录下->conf->settings文件配置<localRepository>D:\myinstall\apache-maven-3.9.4\repository</localRepository>  改地址为本地工作目录 2.配置aliyun中央仓库配置阿里云中央仓库的好处是下载jar包非常快(不配置默认在国外maven中央仓库下......
  • 2.Maven安装与环境变量配置
    一、下载地址https://maven.apache.org/download.cgi 二、安装步骤1.解压文件2.我的电脑->系统变量->新建变量MAVEN_HOME= D:apache-maven-3.5.33.将系统变量MAVEN_HOME添加导path中选中path,新建值:%MAVEN_HOME%\bin三、验证是否安装成功win+r-->cmd-->输入命令:mvn ......
  • JDK的环境变量配置-Windows
    一、准备下载好的jdk,选择一个适合自己的JDK版本下载并安装即可:下载地址:https://www.injdk.cn/http://www.oracle.com/technetwork/java/javase/downloads/index.html二、环境变量配置:1、win+E打开资源管理器,右击“此电脑”选择“属性”,在弹出的页面上点击“高级系统设置”。......
  • SpringBoot配置文件
    management.endpoints.web.exposure.include=*#server.port=8080#设置banner开关spring.main.banner-mode=console#设置logback日志logging.level.root=error#设置指定包级别logging.level.com.wanan.springbootdemo=errorlogging.level.com.wanan.springbootdemo.controller=erro......
  • 在VMware上安装配置openKylin操作系统
       openKylin是由基础软硬件企业、非营利性组织、社团组织、高等院校、科研机构和个人开发者共同创立的一个开源社区,致力于通过开源、开放的社区合作,构建桌面操作系统开源社区,推动Linux开源技术及其软硬件生态繁荣发展。openKylin的愿景是成为全球领先的桌面操作系统,为用户提......
  • 中兴交换机配置MC-LAG生成树配置注意事项
    spantree  enable  moderstp  bridge-addressxxxx.xxxx.xxxx #TOR1,TOR2配置一样,配置为TOR1的机架mac  mstpriority8192 instance0 #存管TOR1,存管TOR2配置一样,优先级配置为8192  tc-guardenable #开启对TC类型BPDU报文的保护功能  vstpenable#开启VSTP功能 ......
  • springboot整合elasticsearch中的分词查询配置
    前言:elasticsearch最好还是在linux中进行集群部署,这样更符合企业需求和规范,笔者只在windows的单节点9200端口上部署,仅用于测试和学习。 什么是分词查询: 指的是将输入的文本或查询语句切分成一个个独立的词语或词项,以便更好地处理和分析,然后进行查询,比如你在百度上搜索”成都......