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应用程序配置的更多相关文章

  1. Python flask中的配置

    当你开始学习Flask时,配置看上去是小菜一碟.你仅仅需要在config.py定义几个变量,然后万事大吉. 然而当你不得不管理一个生产上的应用的配置时,这一切将变得棘手万分. 你不得不设法保护API密 ...

  2. Python——Flask框架——程序的结构

    一.项目结构 |-flasky |-app Flask程序一般都保存在这里 |-templates/ |-static/ |main/ |-__init__.py |-errors.py |-form ...

  3. Flask之项目配置,目录构建,闪现

    综合案例:学生成绩管理 新建项目目录students,并创建虚拟环境 mkvirtualenv students 安装开发中使用的依赖模块 pip install flask==0.12.4pip i ...

  4. Flask:文件配置方式实践及其中的各种问题记录

    Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2, 提示: 1.请查看本文后面的“18-07-17  11:18重大纠正” ! 2.flask run命令运行时传入参数 ...

  5. 采用flask+uwsgi+nginx架构将flask应用程序部署在腾讯云

    最近一星期加班为学校做了一个教师发展中心平台,在此总结一下部署经验 环境:Centos7.0  python2.7.5 1.安装nginx 命令行输入指令:sudo yum install nginx ...

  6. IDM主机上安装融合应用程序配置框架

    IDM主机上安装融合应用程序配置框架   安装Oracle融合应用程序>设置>身份和访问管理节点安装融合应用程序配置框架 由于我们使用Oracle VirtualBox虚拟机这一次,我们在 ...

  7. .Net 自定义应用程序配置

    .Net 自定义应用程序配置 引言 几乎所有的应用程序都离不开配置,有时候我们会将配置信息存在数据库中(例如大家可能常会见到名为Config这样的表):更多时候,我们会将配置写在Web.config或 ...

  8. VS2008 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。

    提示这个错误,自己的程序是在VS2008下编译的C/C++ win32程序,自己当时在win7上开发测试,都没有问题,正常使用,也在另一台xp系统上也试了,都没有问题.就发给客户了,没想到有些客户竟然 ...

  9. loadlibrary(xxx.dll) 失败 返回14001 由于应用程序配置不正确 应用程序未能启动.重新安装应用程序可能会纠正这个问 .

    欢迎大家拍砖! 一.应用背景 有一个在win7中用VS2008编译成功,运行正常的程序:Exe+DLL; 放到XP虚拟镜像上运行却提示:LoadLibrary返回14001. (1) 后来采用了下面方 ...

  10. (转)(VS2013 )由于应用程序配置不正确,程序未能启动”--原因及解决方法

    今天把别人的程序拿过来编译时通过,但是运行的时候,提示:由于应用程序配置不正确,程序未能启动 搜了一下,各种方法.最终通过下面的方法解决的. 项目--->配置属性---->链接器----& ...

随机推荐

  1. 使用 Sealos 一键部署高可用 MinIO,开启对象存储之旅

    大家好!今天这篇文章主要向大家介绍如何通过 Sealos 一键部署高可用 MinIO 集群. MinIO 对象存储是什么? 对象是二进制数据,例如图像.音频文件.电子表格甚至二进制可执行代码.对象的大 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (94)-- 算法导论9.2 3题

    三.用go语言,给出 RANDOMIZED-SELECT的一个基于循环的版本. 文心一言: 在循环中实现 RANDOMIZED-SELECT 的一个版本可以如下所示.这个版本使用 Go 语言编写,利用 ...

  3. 在线问诊 Python、FastAPI、Neo4j — 创建 检查节点

    目录 症状数据 创建节点 根据不同的症状,会建议做些相对应的检验.检查 症状数据 examine_data.csv 建议值用""引起来.避免中间有,号造成误识别 检查 " ...

  4. destoon根据标题删除重复数据

    因为采集数据比较庞大,难免出现重复数据,所以写了一个根据标题进行删除重复数据的mysql命令,需要的朋友可以使用. 1 2 3 4 DELETE from destoon_article_36 whe ...

  5. Vue项目——尚品会

    1: 项目的初始化 环境要求:node + webpack + 淘宝镜像 初始化项目: vue create 项目名称 目录/文件分析: - node_modules文件夹:放置项目依赖的地方 - p ...

  6. 报错Intel MKL FATAL ERROR: Cannot load libmkl_core.so.的一种解决方法

    问题 今天上80服务器跑mdistiller的代码时,意外发现torch.numpy都不能用了T_T 以torch为例,出现如下报错情况 以numpy为例,出现如下报错情况 我们先看看报错信息,这个报 ...

  7. nittest单元测试框架—加载测试用例的3种方法以及测试报告存储管理

    项目结构 测试用例 import unittest class LoginTestCase(unittest.TestCase): def test_login_success(self): self ...

  8. LLM探索:为ChatGLM2的gRPC后端增加连续对话功能

    前言 之前我做 AIHub 的时候通过 gRPC 的方式接入了 ChatGLM 等开源大模型,对于大模型这块我搞了个 StarAI 框架,相当于简化版的 langchain ,可以比较方便的把各种大模 ...

  9. 命令vue inspect > output.js报错:在此系统上禁止运行脚本

    用的这个命令去看output.js文件,结果报错. 解决方案是去对应目录下删掉vue.ps1就OK了 .

  10. Jenkins集成maven/gitlab-代码拉取

    Jenkins插件-加速-上传安装-离线安装 1.加速插件(国外的源替换成国内的源-->系统管理-->插件管理-->高级-->升级站点-->修改URL) 清华源链接:ht ...