【flask】flask项目配置 app.config
【理论】
在很多情况下,你需要设置程序的某些行为,这时你就需要使用配置变量。在Flask中,配置变量就是一些大写形式的Python变量,
你也可以称之为配置参数或配置键。使用统一的配置变量可以避免在程序中以硬编码的形式设置程序。
在一个项目中,你会用到许多配置,Flask提供的配置,扩展(比如flask-sqlalchemy,flask-mail)提供的配置,还有程序特定的配置。
和平时使用的变量不同,这些配置变量都通过Flask对象的app.config属性作为统一的接口来设置和获取,它指向的Config类实际上是字典的的子类,
所以你可以像操作其它字典一样操作它。
当我们创建1个Flask对象(也就是app),就可以通过app.config来查看这个app的所有配置变量
from flask import Flask
app=Flask(__name__) print(type(app.config))
<class 'flask.config.Config'>#app.config的类型 print(app.config)#app.config 以键值对的形式 保存app的配置信息
<Config {'ENV': 'production', 'DEBUG': False, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': None, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'SERVER_NAME': None, 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(seconds=43200), 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093}>
常用配置及含义:
ENV:测试环境
production:生产环境,development:开发环境
DEBUG:是否开启debug模式
SECRET_KEY:密钥字符串
JSON_AS_ASCII:是否以ascii编码展示响应报文
JSONIFY_MIMETYPE:响应报文类型
值得注意的是:
如果响应报文含中文,JSON_AS_ASCII的值为False,JSONIFY_MIMETYPE值为"application/json;charset=utf-8",
否则响应报文中的中文会显示乱码
JSON_AS_ASCII =False
JSONIFY_MIMETYPE = "application/json;charset=utf-8"
【实践】
Flask提供了很多种方式来加载配置。比如,你可以像在字典中添加一个键值对一样来设置一个配置:
app.config['ADMIN_NAME']='Peter'
注意:配置的名称必须是全大写形式,小写的变量将不会被读取
除此之外,还可以通过把配置变量存储在单独的Python脚本、JSON格式的文件或是Python类中,config对象提供了相应的方法来导入配置。
和操作字典一样,读取一个配置就是从config字典里通过将配置的名称作为键读取对应的值:
value=app.config['ADMIN_NAME']
注意:某些扩展需要读取配置值来完成初始化操作,比如Flask-Mail,因此我们应该尽量将加载配置的操作提前,最好在程序实例app创建后就加载配置。
下面将逐一演示各种配置方式,及其效果
目录结构:

通过 键值对 配置app.config:
from flask import Flask
app =Flask(__name__)
print('配置前',app.config.get('FLASK_ENV'))
#使用键值对配置app环境变量
app.config['FLASK_ENV']='ABC'
print('配置后',app.config.get('FLASK_ENV')) #------运行结果----------------
配置前 None
配置后 ABC
使用update()方法可以一次加载多个值:
from flask import Flask
app =Flask(__name__) print('配置前',app.config.get('FLASK_ENV'))
#使用 update()方法可以一次加载多个值
app.config.update(
FLASK_ENV='ABC',
AAAA=123456
)
print('配置后',app.config.get('FLASK_ENV'))
print('配置后',app.config.get('AAAA')) #------运行结果----------------
配置前 None
配置后 ABC
配置后 123456
通过 json文件 配置app.config:app.config.from_json
settings.json文件内容如下:
{
"FLASK_ENV":"json"
}
代码示例:
from flask import Flask
app =Flask(__name__) import os
basedir = os.path.abspath(os.path.dirname(__file__))
jsondir =os.path.join(basedir,'settings.json') print('配置前',app.config.get('FLASK_ENV'))
#使用 json文件 配置app环境变量
app.config.from_json(jsondir)
print('配置后',app.config.get('FLASK_ENV')) #------运行结果---------------- 配置前 None
配置后 json
通过 字典 配置app.config: app.config.from_mapping
代码示例:
from flask import Flask
app =Flask(__name__) configDict={
'FLASK_ENV':'dictConfig'
} print('配置前',app.config.get('FLASK_ENV'))
#使用 json文件 配置app环境变量
app.config.from_mapping(configDict)
print('配置后',app.config.get('FLASK_ENV')) #------运行结果----------------
配置前 None
配置后 dictConfig
通过 python文件 配置app.config:
settings.py文件中内容如下:
py文件中的变量名将作为 app.config配置的key,变量值作为app.config[key]的value
FLASK_ENV='pyConfig'
代码示例:
from flask import Flask
app =Flask(__name__) print('配置前',app.config.get('FLASK_ENV'))
#使用 json文件 配置app环境变量
app.config.from_pyfile('settings.py')
print('配置后',app.config.get('FLASK_ENV')) #------运行结果----------------
配置前 None
配置后 pyConfig
通过 配置类 配置app.config:
classConfig.py定义了配置类BaseConfig
类中的属性作为 app.config的key,类中的属性值作为app.config[key]的value
class BaseConfig(object):
FLASK_ENV='objectConfig'
代码示例:
from flask import Flask
app =Flask(__name__) from demoConfig.classConfig import BaseConfig
objConfig=BaseConfig() print('配置前',app.config.get('FLASK_ENV'))
#使用 json文件 配置app环境变量
app.config.from_object(objConfig)
print('配置后',app.config.get('FLASK_ENV')) #------运行结果----------------
配置前 None
配置后 objectConfig
【flask】flask项目配置 app.config的更多相关文章
- Flask之项目配置,目录构建,闪现
综合案例:学生成绩管理 新建项目目录students,并创建虚拟环境 mkvirtualenv students 安装开发中使用的依赖模块 pip install flask==0.12.4pip i ...
- flask 第二章 endpoint重名 Flask路由 初始化配置 Falsk Config 蓝图+目录结构
今日内容 1.路由的分发,以下两种方式效果一样,但是都能指向同一个函数 from flask import Flask app=Flask(__name__) #第一种方式 @app.route('/ ...
- 数据库连接配置 app.config web.config
通过ADO.Net连接程序和SQLServer数据库的连接字符串: connectionString ="server=(local);database=Demo;integrated se ...
- C# 如何添加自定义键盘处理事件 如何配置app.config ? | csharp key press event tutorial and app.config
本文首发于个人博客https://kezunlin.me/post/9f24ebb5/,欢迎阅读最新内容! csharp key press event tutorial and app.config ...
- [ionic开源项目教程] - 第2讲 新建项目,配置app.js和controllers.js搭建基础视图
新建项目 由项目功能架构图选择合适的页面架构,这里选用Tab,ionic新建项目,默认的模板就是tab. $ ionic start TongeNews Creating Ionic app in f ...
- Vue-cli3 项目配置 Vue.config.js( 代替vue-cli2 build config)
Vue-cli3 搭建的项目 界面相对之前较为简洁 之前的build和config文件夹不见了,那么应该如何配置 如webpack等的配那 只需要在项目的根目录下新建 vue.config.js 文件 ...
- asp.net项目配置Web.config,支持JSON
VS2013新建的web项目不支持直接下载json文件,可以在项目的web.config下插入如下的配置信息. <configuration> <system.web> < ...
- winform 项目获取app.config 中appSettings节点数据
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSe ...
- WCF 配置App.Config
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="/> & ...
随机推荐
- IIS7发布asp.net mvc提示404
之前服务器用的都是2003Server的服务器,发布mvc项目都没问题,今天换了一台机器,系统为Windows Server2008 R2 64位的发布mvc项目后就提示: 百度看到好多人说在web ...
- python、第一篇:初识数据库
一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...
- 架构师成长之路5.3-Saltstack配置管理(State状态模块)
点击架构师成长之路 架构师成长之路5.3-Saltstack配置管理(State状态模块) 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需要 ...
- Function HDU - 6546 (数学,贪心)
wls 有 n 个二次函数 Fi(x) = aix2 + bix + ci (1 ≤ i ≤ n). 现在他想在∑ni=1xi = m 且 x 为正整数的条件下求∑ni=1Fi(xi)的最小值. 请求 ...
- 牛客第八场 C-counting paths 树形dp计数
题目地址 题意 给你一颗树 初始点颜色全部为白色 对于每一个满足要求一的点集s f(s)的定义为先把点集内的点染黑 满足要求二的路径集合数量 要求一为两两黑点之间不能出现白色的点 要求二为将这个路径集 ...
- Summer training round2 #7 (Training #23)
A:约瑟夫环 套公式 B:线性筛素数 C:投骰子 概率DP F:有权无向图的生成树(边最大值和最小值只差最小) 直接kruskal G:状压BFS或者双向BFS H:模拟题 I:几何题 J:高斯消元
- R 语言中的多元线性回归
示例 sessionInfo() # 查询版本及系统和库等信息 # 工作目录设置 getwd() path <- "E:/RSpace" setwd(path) rm(lis ...
- HDU - 4431 Mahjong (模拟+搜索+哈希+中途相遇)
题目链接 基本思路:最理想的方法是预处理处所有胡牌的状态的哈希值,然后对于每组输入,枚举每种新加入的牌,然后用哈希检验是否满足胡牌的条件.然而不幸的是,由于胡牌的状态数过多(4个眼+一对将),预处理的 ...
- 野生小白纯js仿思否简易移动端
初衷 感谢思否两个多月来的陪伴做这个东西还是多自己两个月多来的学习总结吧,顺带练手.希望能找到一个还可以的工作吧! 为什么没用框架 react过了一边官方文档,对状态提升和组件有点了解一下,懂得还是太 ...
- Java中遍历HashMap方式
本教程将为你展示Java中HashMap的几种典型遍历方式. 如果你使用Java8,由于该版本JDK支持lambda表达式,可以采用第5种方式来遍历. 如果你想使用泛型,可以参考方法3.如果你使用旧版 ...