【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创建后就加载配置。

    下面将逐一演示各种配置方式,及其效果

   目录结构:

【flask】flask项目配置 app.config

 

  通过 键值对 配置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

上一篇:Android为TV端助力之查找当前界面焦点所在位置


下一篇:VUE - 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法