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. TypeScript中Class基础使用

    TypeScript是一种静态类型的JavaScript超集,它提供了许多增强的功能,其中之一就是对面向对象编程的支持.在TypeScript中,我们可以使用Class来定义类,这使得我们能够更加结构 ...

  2. 精选版:用Java扩展Nginx(nginx-clojure 入门)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 今天咱们以Java程序员的视角,来聊聊如何用 ...

  3. windows10 jdk下载及环境配置

     一.环境准备 windows10 系统 jdk 各种版本(配置大同小异) 二.下载并安装jdk 下载地址:http://www.oracle.com/technetwork/java/javase/ ...

  4. Ds100p -「数据结构百题」41~50

    41.P3590 [POI2015]TRZ 给定一个长度为n的仅包含'B'.'C'.'S'三种字符的字符串,请找到最长的一段连续子串,使得这一段要么只有一种字符,要么有多种字符,但是没有任意两种字符出 ...

  5. 其它——MyCat实现分库分表

    文章目录 MyCat实现分库分表 一 开源数据库中间件-MyCat 二 MyCat简介 三 MyCat下载及安装 3.1 MySQL安装与启动 3.2使用docker启动多个数据库 3.3 MyCat ...

  6. 2023_10_09_MYSQL_DAY_01_课后题

    2023_10_09_MYSQL_DAY_01_课后题 #第三章 #1. 查询每名员工的员工姓名,入职时间. SELECT ename, hiredate FROM emp; #2. 查询部门表中部门 ...

  7. css 10-13

    1.背影样式 backgroud-color                   背景颜色 backgroud-color :red backgroud-image                 背 ...

  8. C语言存储类别

    对于C语言中的变量,存储类别可分为4种:auto(自动存储).static(静态存储).register(寄存器存储).extern(外部存储). auto自动存储 函数中的局部变量,如果不专门声明为 ...

  9. 虹科干货 | 虹科Redis企业版数据库的延迟如此之小,proxy功不可没!

    在Redis企业版集群的后台发生了许多事件,proxy(代理)隐藏了数据库客户端的所有活动. 大多数开发人员在构建应用程序时都会从小规模开始,使用简单的Redis开源(Redis OSS)数据库.在初 ...

  10. HarmonyOS原生分析能力,即开即用助力精细化运营

    数据分析产品对开发者的价值呈现在两个层面,第一个是产品的层面,可以通过数据去洞察用户的行为,从而找到产品的优化点.另外一个就是运营层面,可以基于数据去驱动,来实现私域和公域的精细化运营. 在鸿蒙生态上 ...