所有的配置变量名都必须大写,否则 app.config.get() 读不到
1 直接配置
config['HOST']='xxx.a.com' # 实质上是通过使用下标的方式访问字典的“值”
print(app.config.get('HOST')) # flask.config.get('HOST')可获得配置 键 HOST 的对应值,类似于字典对象的 get() 方法
2 通过环境变量加载配置
使用环境变量加载。这种方法依然支持silent参数,获得路径后其实
还是使用from_pyfile的方式加载的。
export MyAppConfig=/path/to/settings.cfg
app.config.from_envvar('MyAppConfig')
这样将会加载环境变量指向的配置文件,并加载
3 通过对象加载
class Config(object):
DEBUG = False
TESTING = False
DATABASE_URI = 'sqlite://:memory:'
class ProductionConfig(Config):
DATABASE_URI = 'mysql://user@localhost/foo'
class DevelopmentConfig(Config):
DEBUG = True
class TestingConfig(Config):
TESTING = True
from flask import Flask
app = Flask(__name__)
app.config.from_object(ProductionConfig)
print(app.config.get('DATABASE_URI')) # mysql://user@localhost/foo
或者:
from flask import Flask
import default_config # default_config可以是一个类【只有类变量】,还可以是一个.py文件【内容是多个常变量】
app = Flask(__name__)
app.config.from_object(default_config) # 这里 defualt_config是一个对象
print(app.config.get('HOST'))
4 通过配置文件
直接传入名字就行了
别的后缀的也可以,不局限于.py的
app.config.from_pyfile('default_config.py',silent=True) # 这里defualt_config.py是文件
# 默认为 silent=False ,即当配置文件不存在的时候抛出异常,
# 使用silent=True的时候只是会返回False,但是不抛出异常
# default_config.py
HOST = 'localhost'
PORT = 5000
DEBUG = True
# 使用配置
print(app.config['HOST'])
或者
# 也可以在引用之后直接传入对象
import default_config
app.config.from_object(default_config)
4.1 default_config.py所在目录
from flask import Flask
# app = Flask(__name__, instance_relative_config=True)
app = Flask(__name__)
app.logger.setLevel(logging.DEBUG)
logging.warning("root_path=" + app.root_path)
logging.warning("instance_path=" + app.instance_path)
app.config.from_pyfile("default_config.py")
logging.warning(app.config["A"])
from flask import Flask
app = Flask(__name__)
app.logger.setLevel(logging.DEBUG)
logging.warning("root_path=" + app.root_path)
logging.warning("instance_path=" + app.instance_path)
# app.config.from_pyfile(r"E:\PychamrProject\flask_test\instance\default_config.py") # 绝对路径
app.config.from_pyfile(r"../instance/default_config.py") # 相对路径
logging.warning(app.config["A"])
"""
# 绝对路径时default_config.py可以放在任意目录下
# 相对路径时相对的是root_path[而 root_path=/flask_test/app1]目录
"""
或
from flask import Flask
app = Flask(__name__, instance_relative_config=True)
app.logger.setLevel(logging.DEBUG)
logging.warning("root_path=" + app.root_path)
logging.warning("instance_path=" + app.instance_path)
app.config.from_pyfile(r"default_config.py")
logging.warning(app.config["A"])
from flask import Flask, request, render_template, redirect, current_app
app = Flask(__name__, instance_path=r"C:\Users\xxxxxxxxx\Desktop\test", instance_relative_config=True)
app.logger.setLevel(logging.DEBUG)
logging.warning("root_path=" + app.root_path)
logging.warning("instance_path=" + app.instance_path)
app.config.from_pyfile(r"default_config.py")
logging.warning(app.config["A"])
[4 总结]