flask应用程序配置
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应用程序配置的更多相关文章
- Python flask中的配置
当你开始学习Flask时,配置看上去是小菜一碟.你仅仅需要在config.py定义几个变量,然后万事大吉. 然而当你不得不管理一个生产上的应用的配置时,这一切将变得棘手万分. 你不得不设法保护API密 ...
- Python——Flask框架——程序的结构
一.项目结构 |-flasky |-app Flask程序一般都保存在这里 |-templates/ |-static/ |main/ |-__init__.py |-errors.py |-form ...
- Flask之项目配置,目录构建,闪现
综合案例:学生成绩管理 新建项目目录students,并创建虚拟环境 mkvirtualenv students 安装开发中使用的依赖模块 pip install flask==0.12.4pip i ...
- Flask:文件配置方式实践及其中的各种问题记录
Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2, 提示: 1.请查看本文后面的“18-07-17 11:18重大纠正” ! 2.flask run命令运行时传入参数 ...
- 采用flask+uwsgi+nginx架构将flask应用程序部署在腾讯云
最近一星期加班为学校做了一个教师发展中心平台,在此总结一下部署经验 环境:Centos7.0 python2.7.5 1.安装nginx 命令行输入指令:sudo yum install nginx ...
- IDM主机上安装融合应用程序配置框架
IDM主机上安装融合应用程序配置框架 安装Oracle融合应用程序>设置>身份和访问管理节点安装融合应用程序配置框架 由于我们使用Oracle VirtualBox虚拟机这一次,我们在 ...
- .Net 自定义应用程序配置
.Net 自定义应用程序配置 引言 几乎所有的应用程序都离不开配置,有时候我们会将配置信息存在数据库中(例如大家可能常会见到名为Config这样的表):更多时候,我们会将配置写在Web.config或 ...
- VS2008 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。
提示这个错误,自己的程序是在VS2008下编译的C/C++ win32程序,自己当时在win7上开发测试,都没有问题,正常使用,也在另一台xp系统上也试了,都没有问题.就发给客户了,没想到有些客户竟然 ...
- loadlibrary(xxx.dll) 失败 返回14001 由于应用程序配置不正确 应用程序未能启动.重新安装应用程序可能会纠正这个问 .
欢迎大家拍砖! 一.应用背景 有一个在win7中用VS2008编译成功,运行正常的程序:Exe+DLL; 放到XP虚拟镜像上运行却提示:LoadLibrary返回14001. (1) 后来采用了下面方 ...
- (转)(VS2013 )由于应用程序配置不正确,程序未能启动”--原因及解决方法
今天把别人的程序拿过来编译时通过,但是运行的时候,提示:由于应用程序配置不正确,程序未能启动 搜了一下,各种方法.最终通过下面的方法解决的. 项目--->配置属性---->链接器----& ...
随机推荐
- 《Python魔法大冒险》006 变量的迷雾
小鱼和魔法师走了很久,终于来到了一个神秘的森林前.这片森林与众不同,它被一层厚厚的迷雾所包围,仿佛隐藏着无尽的秘密. 小鱼好奇地看着这片森林:"这是什么地方?" 魔法师:这是魔法森 ...
- 使用vscodep快速编写markdown
写在前面 这是一篇基于 vscode 配置,用于书写 markdown 的文章 为了方便快速书写 markdown 真想使用一些便捷的快捷键去生成一些自己常用的格式或者是模版,于是自己基于自己的个人习 ...
- springBoot使用注解Aop实现日志模块
我们在日常业务操作中需要记录很多日志,可以在我们需要的方法中对日志进行保存操作,但是对业务代码入侵性大.使用切面针对控制类进行处理灵活度不高,因此我们可以使用自定义注解来针对方法进行日志记录 1.注解 ...
- numpy 索引,切片 ,转置,变值,多个数组的拼接
- 【稳定性】关于缩短MTTR的探索
一.什么是 MTTR ? 当系统出现系统故障时,我们需要通过一些指标来衡量故障的严重程度和影响范围.其中MTTR(Mean Time To Repair 名为_平均修复时间_)是一个非常重要的指标,它 ...
- How to parse OR AND within text
假设你有一行 String condition = "A or B and C"; 语句,请问怎么做才能变成一行真正的逻辑表达式(能在计算机中运行计算)? Resolution 声 ...
- Capture Data.dmg
苹果apple mac 系统检测 日常分析 软件 https://gigafiles.apple.com/#/download 现有文件可供下载. 备注 Capture Data 9.9.0 Th ...
- vcpkg manifest 的使用
最近项目上要使用 CMakeLists 管理,由于 Windows 版本有依赖到 vcpkg 提供的库,所以需要使用 vcpkg manifest 来统一设置库的版本,方便后续维护 推荐一个文章,介绍 ...
- 可视化-vscode使用Plotly,绘制直方图
Plotly 是一款用来做数据分析和可视化的在线平台,功能非常强大,可以在线绘制很多图形比如条形图.散点图.饼图.直方图等等. 概述: plotly在python中绘图使用分三种:1.plotly.g ...
- 16.1 Socket 端口扫描技术
端口扫描是一种网络安全测试技术,该技术可用于确定对端主机中开放的服务,从而在渗透中实现信息搜集,其主要原理是通过发送一系列的网络请求来探测特定主机上开放的TCP/IP端口.具体来说,端口扫描程序将从指 ...