Python 烧瓶不加载配置

Python 烧瓶不加载配置,python,mongodb,flask,mongoengine,flask-mongoengine,Python,Mongodb,Flask,Mongoengine,Flask Mongoengine,我在烧瓶中加载配置时遇到问题 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_o

我在烧瓶中加载配置时遇到问题

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]等的类型。它们很好

配置文件如下所示。导入、对象类型没有问题。如果以静态方式传递,则一切正常。 “主机”=“服务器IP”是故意的

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

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.

我认为问题可能在于这样一个事实:当Python对象需要字符串时,您正在从对象
app.config.from
提供一个Python对象。从文档中:

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

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

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

其中
config\u name
与config.py中的对象匹配。

能否共享config的源代码?我们需要看看DevelopmentConfig和其他是如何定义的。您是如何调用它的?使用Flask脚本管理器以及运行unittests。我花了相当长的时间来测试其他的东西。它很好用。问题就在我在问题中提到的这一点上。尝试时会发生什么:
app.config.from_object(config['development'])
?@rbp不起作用:(感谢您的回复。不幸的是它不起作用。另外,app.config.from_object(config[config_name]))当我使用SQLAlchemy时效果很好,但在MONGODB的情况下,它不会更新MONGODB的设置。请记住,from_对象中的这个字符串直接与对象名称相关-因此您需要
您的app.config.DevelopmentConfig
例如。我已经获取了您的代码并创建了一个小测试,它在像-如果需要,请打印出配置名称或更好的方法,然后放入调试器以确保其工作。当然,我将使用调试器。我已尝试打印变量等。问题主要出现在它没有更改配置中的MONGODB_设置时。我还有一个与您的问题更为一致的相关问题。