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. QA|Pycharm:allure : 无法将“allure”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。|Allure

    Pycharm中生成allure测试报告时报错如图: 单独执行allure --version也不行,cmd这样执行也报同样的错 网上查了 说是环境变量问题,加一下cmd可以了,重启pycharm也可 ...

  2. 手把手教你搭建springbootsecurity+jwt,全面了解

    研究了两周了springbootsecurity+jwt的使用,终于搭起来了,这里跟大家分享下. 首先,不了解jwt的可以提前去查下相关资料,我之前也有讲过,大家可以先看下:  https://www ...

  3. 教你2种方法,将iOS设备通过MQTT协议连接到华为云物联网平台

    本文分享自华为云社区<如何将iOS设备通过MQTT协议连接到华为云物联网平台: Flutter和Swift两种方法>,作者: 张俭 . 前言 当今时代,物联网技术正逐步改变我们的生活和工作 ...

  4. 每日一练:无感刷新页面(附可运行的前后端源码,前端vue,后端node)

    1.前言 想象下,你正常在网页上浏览页面.突然弹出一个窗口,告诉你登录失效,跳回了登录页面,让你重新登录.你是不是很恼火.这时候无感刷新的作用就体现出来了. 2.方案 2.1 redis设置过期时间 ...

  5. MySQL实战实战系列 02 日志系统:一条SQL更新语句是如何执行的?

    前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块.相信你还记得,一条查询语句的执行过程一般是经过连接器.分析器.优化器.执行器等功能模块,最后到达存储引擎. 那么,一条更新语 ...

  6. Solution -「CF 1039D」You Are Given a Tree

    Description Link. 有一棵 \(n\) 个节点的树,其中一个简单路径的集合被称为 \(k\) 合法当且仅当:树的每个节点至多属于其中一条路径,且每条路径恰好包含 \(k\) 个点. 对 ...

  7. Linux中python更换pip源

    Linux中python更换pip源 执行以下命令,更换为阿里源: echo " [global] trusted-host = mirrors.aliyun.com index-url = ...

  8. How to Install Bugzilla on Ubuntu 20.04

    In this blog post, we are going to explain in step-by-step detail on how to install Bugzilla on Ubun ...

  9. 关于如何解决visualc++6.0打开文件闪退的一种方式(附带解决输入法无法显示)

    这里我把VisualC++6.0安装程序和filetool分享在我的网盘里面了 网盘下载QAQ 链接:https://pan.baidu.com/s/1azSMX_cOKgb64WT7-gTdbQ?p ...

  10. Go泛型解密:从基础到实战的全方位解析

    本篇文章深入探讨了Go语言的泛型特性,从其基础概念到高级用法,并通过实战示例展示了其在实际项目中的应用. 关注[TechLeadCloud],分享互联网架构.云服务技术的全维度知识.作者拥有10+年互 ...