【问题标题】:Flask does not load configurationFlask 不加载配置
【发布时间】:2016-04-21 02:11:45
【问题描述】:

我在 Flask 中加载配置时遇到问题。

from config import config, DevelopmentConfig, TestingConfig, ProductionConfig

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])    # Doesnot load configuration
    app.config.from_object(DevelopmentConfig)    # Loads configuration succesfully.

我已经检查了 config[config_name] 等的类型。它们很好。

配置文件如下。导入对象类型没有问题。如果静态通过,一切正常。 'host'='serverip' 是故意的。

此外,当我尝试使用 SQLAlchemy 连接到 db 时不会出现此问题,但对于 MongoDB,它不会更新应用程序设置中的 MONGODB_SETTINGS。

import os
basedir = os.path.abspath(os.path.dirname(__file__))

from helper.helper_functions import generate_secret_key

class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY') or generate_secret_key()
    SSL_DISABLE = False

    @staticmethod
    def init_app(app):
        pass


class DevelopmentConfig(Config):
   DEBUG = True
    MONGODB_SETTINGS = {
        'DB': 'development_db',
        'host': 'localhost',
       'port': 27017
    }


class TestingConfig(Config):
    TESTING = True
    WTF_CSRF_ENABLED = False
    MONGODB_SETTINGS = {
        'DB': 'testing_db',
        'HOST': 'localhost',
        'PORT': 27017
    }


class ProductionConfig(Config):
    MONGODB_SETTINGS = {
        'DB': 'production_db',
        'host': 'server_ip',
        'port': 27017,       # default =27017
        # other settings...
    }

    @classmethod
    def init_app(app):
        Config.init_app(app)

config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': TestingConfig,
}

有趣

app.config.update(MONGODB_SETTINGS={'DB':'testing_db'})   # works
settings = dict([('db', 'testing_db')])
app.config.update(MONGODB_SETTINGS=settings)    # Does not work

另外,当我尝试使用 Flask-Config 提供的其他方法从配置文件加载配置时。

conf_name = 'test-config.py'
app.config.pyfile(conf_name)    # Doesnot load the configuration from the file.
app.config.pyfile(''+conf_name)    # Doesnot load the configuration from the file.
app.config.pyfile('test-config.py')    #successfully loads the configuration from file.

【问题讨论】:

  • 能分享一下config的源码吗?我们需要看看 DevelopmentConfig 和其他是如何定义的。
  • 你是怎么调用这个的?
  • 使用 Flask 脚本管理器以及运行单元测试。我花了相当长的时间来测试其他所有东西。它工作正常。问题出在我在问题中提到的这一点上。
  • 当你尝试时会发生什么:app.config.from_object(config['development'])
  • @rbp 不起作用 :(

标签: python mongodb flask mongoengine flask-mongoengine


【解决方案1】:

我相信问题可能在于您将 Python 对象提供给 app.config.from_object,而它需要一个字符串。来自文档:

app = Flask(__name__)
app.config.from_object('yourapplication.default_settings')
app.config.from_envvar('YOURAPPLICATION_SETTINGS')

http://flask.pocoo.org/docs/0.10/config/#configuring-from-files

因此,在您的情况下,您可能想要执行以下操作:

app.config.from_object('your_app.config.{}'.format(config_name))

config_name 与 config.py 中的对象匹配。

【讨论】:

  • 感谢您的回复。不幸的是,它不起作用。此外,当我使用 SQLAlchemy 时,app.config.from_object(config[config_name]) 可以完美运行,但对于 MONGODB,它不会更新 MONGODB _SETTINGS。
  • 请记住,from_object 中的这个字符串与对象名称直接相关——例如,您需要your_app.config.DevelopmentConfig。我已经获取了您的代码并创建了一个小测试,并且在设置它时它确实有效 - 如果需要打印出 config_name 或更好地放入调试器以确保它有效。
  • 当然,我会使用调试器。我已经尝试打印变量等。问题主要出现在它没有更改配置中的 MONGODB_SETTINGS 时。我有另一个与您的问题更一致的相关问题。 stackoverflow.com/questions/34808010/…
猜你喜欢
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 2015-08-23
相关资源
最近更新 更多