繁体   English   中英

未使用FLASK_APP和App Factory加载烧瓶配置

[英]Flask config not being loaded using FLASK_APP and App Factory

我设置了一个应用程序,尝试使用.env文件配置它,使用python-dotenv加载它,并使用Config类获取变量。 如果我设置了FLASK_APP,例如:export FLASK_APP = pg.py,并执行flask运行,则该应用程序将运行,但未加载配置。 我知道环境变量是从我的.env文件中加载的,经过大量修改后,我意识到该应用程序是在没有上下文的情况下创建的(我认为),但是我不确定如何做到这一点。 如果我在pg.py的末尾添加app.run(),它可以工作,但是我知道那不是我应该做的。 我已经阅读了以下页面: http : //flask.pocoo.org/docs/0.12/cli/多次,但我不太了解它以获取所追求的东西。 我尝试将FLASK_CONFIG = development作为最后一次尝试,以查看是否可以正常工作,但没有成功。 所以我的问题是,我如何使用flask run,并使其正确运行我的应用程序,而不是运行“ python pg.py”

编辑:我注意到除了配置之外,其他所有东西都可以正常工作。 不知道我在想什么。 根据我的阅读,我觉得FLASK_CONFIG = development应该可以工作。 几乎就好像该应用是使用'app = Flask( name )'创建的,跳过了配置加载,并转到了Blueprint注册。 为什么? 我知道我可以在运行之前导出所有敏感信息,并以这种方式进行处理,但是现在我一直想找出问题所在,直到我理解了://

编辑2:实际上,已正确创建了上下文并应用了配置。 它只是不从环境中读取。 DEBUG = True不起作用,但其他配置起作用。 可能在环境加载.env中的变量之前创建了应用实例。 我将把它留在这里,并在找到解决方案时进行更新。

应用程序/ __ init__.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import config

db = SQLAlchemy()


def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    db.init_app(app)

    from app.main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    return app

config.py

import os

class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'environment not set'
    SQLALCHEMY_DATABASE_URI = os.environ.get('DB_URI')

    @staticmethod
    def init_app(app):
        pass


class DevelopmentConfig(Config):
    DEBUG = True


config = {
    'development': DevelopmentConfig
}

pg.py

from app import db, create_app
from flask_migrate import Migrate
import os
from dotenv import find_dotenv, load_dotenv

dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
if os.path.exists(dotenv_path):
    load_dotenv(dotenv_path)
    print("secret key:", os.environ.get('SECRET_KEY'))
else:
    print('no env found')

app = create_app(os.getenv('FLASK_CONFIG'))
migrate = Migrate(app, db)

IRC #pocoo的善良灵魂帮助我看到了光明。 答案很简单。 在导入create_app之前,需要先加载.env,后者还会导入配置文件。

import os
from dotenv import find_dotenv, load_dotenv

dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
load_dotenv(dotenv_path)

from app import db, create_app
from flask_migrate import Migrate
app = create_app(os.getenv('FLASK_CONFIG'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM