Flask:script_info_option发生了什么?

时间:2017-04-28 17:22:11

标签: flask

我希望它能将--config--loglevel--logfile等常见的应用配置选项添加到我的flask.cli群组,并从{{{ 1}}在我的app工厂函数中。

{0.1}装饰者显然在0.11之后删除了一个隐藏的提交消息,例如"实现了简化的界面"。

那么......我现在如何添加app-factory-time配置选项?

2 个答案:

答案 0 :(得分:2)

现在就知道你是怎么做的:

  1. 使用@click.pass_context装饰您的app工厂,以便将上下文作为第一个参数。
  2. 在应用工厂中,使用ctx.find_root().params获取传递给该组的内容。

答案 1 :(得分:0)

您可以创建一个app factory并使用@pass_script_info装饰器向其传递参数,就像这样...

manage.py

#!/usr/bin/env python

import click
import config

from flask import Flask
from flask.cli import FlaskGroup, pass_script_info


def create_app(script_info):
    app = Flask(__name__)

    if script_info.config_mode:
        obj = getattr(config, kwargs["config_mode"])
        flask_config.from_object(obj)

    ...    
    return app


@click.group(cls=FlaskGroup, create_app=create_app)
@click.option('-m', '--config-mode', default="Development")
@pass_script_info
def manager(script_info, config_mode):
    script_info.config_mode = config_mode


if __name__ == "__main__":
    manager()

config.py

class Config(object):
    TESTING = False

class Production(Config):
    DATABASE_URI = 'mysql://user@localhost/foo'

class Development(Config):
    DATABASE_URI = 'sqlite:///app.db'

class Testing(Config):
    TESTING = True
    DATABASE_URI = 'sqlite:///:memory:'

现在在命令行中(运行pip install manage.py之后,您可以执行manage -m Production run