请教 flask 的 config.py 优雅使用方式

2020-09-02 22:53:23 +08:00
 plko345

看了一些文章都在教怎么设置 flask 的配置, 但都没说到怎么合理的用

# config.py
class Config(object):
    A = 'apple'
    B = 'banana'
    # ...
# service.py
import os
from app import create_app
app = create_app(os.getenv('FLASK_CONFIG') or 'default')

现在在代码的各处都可能使用到这些配置

文档里的方式是

from service import app

func(app.config['A'])
var = app.config['B']

# ...

这种使用方式是所有使用到配置的都要导入 app, 那还不如直接导入 config, 那这么做是为什么呢?

也想问下大家是怎么用的?

2943 次点击
所在节点    Python
11 条回复
linw1995
2020-09-02 23:43:18 +08:00
开源轮子 dynaconf 可以了解一下
qqxx520
2020-09-03 06:16:50 +08:00
把配置放到 app.config 似乎成了一个约定,核心的配置还是要放到 app.config, 一些外围的或者自己定义的配置当然可以随便组织,这也是 flask 的灵活性。个人认为,没必要把配置搞得那么复杂,有 DevConfig, TestingConfig 等,像 django 默认提供的 settings.py 那样就挺好,如果要调整一些参数,可以在.env 文件里调整.
prolic
2020-09-03 06:26:53 +08:00
怎么舒服怎么来呗,我都是 conf = Config();from config import conf;conf.get('addr')
plko345
2020-09-03 08:19:25 +08:00
@prolic 用 conf 的话直接 conf.A 就好了,比 app.config 方便很多
vZexc0m
2020-09-03 08:32:14 +08:00
直接把 config 当做变量传入 create_app 也行
renmu123
2020-09-03 08:51:58 +08:00
我是觉得只要能把几个开发环境区分开,你怎么搞 config 都没事,目前这种形式可能是社区认为的最佳实践,你不认可也完全没问题
ratazzi
2020-09-03 08:56:16 +08:00
current_app 了解下
ebingtel
2020-09-03 09:11:08 +08:00
@renmu123 +1……根据 env 决定 app 加载哪个 config……后续通过 current_app.config 去获取配置项, 而不是拿着 config 对象 传来传去
plko345
2020-09-03 18:33:08 +08:00
@renmu123 我觉得是不错的,但想知道有没有更好的使用方法
plko345
2020-09-04 12:07:45 +08:00
@ratazzi
@ebingtel
谢谢, 我了解了下, 这应该就是我想要的
plko345
2020-09-04 12:46:13 +08:00
感觉还是导入 config 方便, 直接 将配置作为属性, 还能自动补全, 不用写 ['']

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/703701

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX