V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
plko345
V2EX  ›  Python

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

  •  
  •   plko345 · 2020-09-02 22:53:23 +08:00 · 3138 次点击
    这是一个创建于 1547 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了一些文章都在教怎么设置 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, 那这么做是为什么呢?

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

    11 条回复    2020-09-04 12:46:13 +08:00
    linw1995
        1
    linw1995  
       2020-09-02 23:43:18 +08:00
    开源轮子 dynaconf 可以了解一下
    qqxx520
        2
    qqxx520  
       2020-09-03 06:16:50 +08:00 via iPhone
    把配置放到 app.config 似乎成了一个约定,核心的配置还是要放到 app.config, 一些外围的或者自己定义的配置当然可以随便组织,这也是 flask 的灵活性。个人认为,没必要把配置搞得那么复杂,有 DevConfig, TestingConfig 等,像 django 默认提供的 settings.py 那样就挺好,如果要调整一些参数,可以在.env 文件里调整.
    prolic
        3
    prolic  
       2020-09-03 06:26:53 +08:00 via Android
    怎么舒服怎么来呗,我都是 conf = Config();from config import conf;conf.get('addr')
    plko345
        4
    plko345  
    OP
       2020-09-03 08:19:25 +08:00 via Android
    @prolic 用 conf 的话直接 conf.A 就好了,比 app.config 方便很多
    vZexc0m
        5
    vZexc0m  
       2020-09-03 08:32:14 +08:00 via Android
    直接把 config 当做变量传入 create_app 也行
    renmu123
        6
    renmu123  
       2020-09-03 08:51:58 +08:00 via Android
    我是觉得只要能把几个开发环境区分开,你怎么搞 config 都没事,目前这种形式可能是社区认为的最佳实践,你不认可也完全没问题
    ratazzi
        7
    ratazzi  
       2020-09-03 08:56:16 +08:00 via iPhone   ❤️ 1
    current_app 了解下
    ebingtel
        8
    ebingtel  
       2020-09-03 09:11:08 +08:00   ❤️ 1
    @renmu123 +1……根据 env 决定 app 加载哪个 config……后续通过 current_app.config 去获取配置项, 而不是拿着 config 对象 传来传去
    plko345
        9
    plko345  
    OP
       2020-09-03 18:33:08 +08:00 via Android
    @renmu123 我觉得是不错的,但想知道有没有更好的使用方法
    plko345
        10
    plko345  
    OP
       2020-09-04 12:07:45 +08:00
    @ratazzi
    @ebingtel
    谢谢, 我了解了下, 这应该就是我想要的
    plko345
        11
    plko345  
    OP
       2020-09-04 12:46:13 +08:00
    感觉还是导入 config 方便, 直接 将配置作为属性, 还能自动补全, 不用写 ['']
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1123 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:07 · PVG 03:07 · LAX 11:07 · JFK 14:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.