flask框架(三)配置文件(配置文件如何写、写在哪儿源码解析)

 
创建一个专门的配置文件,将所有的静态文件放到配置文件中去。比如setting.py文件

class Config(object):
    DEBUG = False
    TESTING = False
    DATABASE_URI = 'sqlite://:memory:'

# 生产环境
class ProductionConfig(Config):
    DEBUG = True

# 开发环境
class DevelopmentConfig(Config):
    pass

# 测试环境
class TestingConfig(Config):
    pass

 
app调用配置文件内容:

app.config.from_object("setting.DevelopmentConfig")

将开发环境所有配置内容都加载到app中。
 
配置的主要内容:

 {
        'DEBUG':                                get_debug_flag(default=False),  是否开启Debug模式
        'TESTING':                              False,                          是否开启测试模式
        'PROPAGATE_EXCEPTIONS':                 None,                          
        'PRESERVE_CONTEXT_ON_EXCEPTION':        None,
        'SECRET_KEY':                           None,
        'PERMANENT_SESSION_LIFETIME':           timedelta(days=31),
        'USE_X_SENDFILE':                       False,
        'LOGGER_NAME':                          None,
        'LOGGER_HANDLER_POLICY':               'always',
        'SERVER_NAME':                          None,
        'APPLICATION_ROOT':                     None,
        'SESSION_COOKIE_NAME':                  'session',
        'SESSION_COOKIE_DOMAIN':                None,
        'SESSION_COOKIE_PATH':                  None,
        'SESSION_COOKIE_HTTPONLY':              True,
        'SESSION_COOKIE_SECURE':                False,
        'SESSION_REFRESH_EACH_REQUEST':         True,
        'MAX_CONTENT_LENGTH':                   None,
        'SEND_FILE_MAX_AGE_DEFAULT':            timedelta(hours=12),
        'TRAP_BAD_REQUEST_ERRORS':              False,
        'TRAP_HTTP_EXCEPTIONS':                 False,
        'EXPLAIN_TEMPLATE_LOADING':             False,
        'PREFERRED_URL_SCHEME':                 'http',
        'JSON_AS_ASCII':                        True,
        'JSON_SORT_KEYS':                       True,
        'JSONIFY_PRETTYPRINT_REGULAR':          True,
        'JSONIFY_MIMETYPE':                     'application/json',
        'TEMPLATES_AUTO_RELOAD':                None,
    }

 
config.from_object执行逻辑:

# 进入from_object(只看未注释部分)
def from_object(self, obj):
    # 如果传入的obj是字符串类型
    if isinstance(obj, string_types):
        # 调用import_string方法(下一代码块)
        # 返回配置对象
    	obj = import_string(obj)
    # 获取配置对象内容并遍历输出
    for key in dir(obj):
        # 判断所有的静态字段是不是大写
    	if key.isupper():
            # 如果是才将其写入app配置中
    		self[key] = getattr(obj, key)
# 进入import_string方法
def import_string(import_name, silent=False):
    # 将传入的import_name也就是from_object中传入的字符串中的':'替换成'.'
	import_name = str(import_name).replace(":", ".")
    try:
        try:
            # 与import一样,导入import_name对应内容
            __import__(import_name)
        # 如果导入异常
        except ImportError:
            # 如果"."不在import_name中,抛出异常
            if "." not in import_name:
                raise
        else:
            # 将导入模块加载并返回
            return sys.modules[import_name]
		
        # 拆分模块名和类名
        module_name, obj_name = import_name.rsplit(".", 1)
        # 导入模块
        module = __import__(module_name, globals(), locals(), [obj_name])
        try:
            # 返回module.obj_name
            return getattr(module, obj_name)
        # 抛出导入异常
        except AttributeError as e:
            raise ImportError(e)

    except ImportError as e:
        # 判断是否忽略导入异常,如果不,抛出异常
        if not silent:
            reraise(
                ImportStringError, ImportStringError(import_name, e), sys.exc_info()[2]
            )

 
除了上面这个常用的设置配置文件之外,还有以下几种方式:

# 直接修改配置
app.config['DEBUG'] = True
# 由于Config对象本质上是字典,所以还可以使用app.config.update(...)

# 字典格式
app.config.from_mapping({'DEBUG':True})


# 导入其他配置
app.config.from_pyfile("python文件名称")
# 例如:settings.py
DEBUG = True
# 主文件
app.config.from_pyfile("settings.py")


# 环境变量的值为python文件名称名称,内部调用from_pyfile方法
app.config.from_envvar("环境变量名称")


# JSON文件名称,必须是json格式,因为内部会执行json.loads
app.config.from_json("json文件名称")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值