【问题标题】:Flask config not being loaded using FLASK_APP and App Factory未使用 FLASK_APP 和 App Factory 加载 Flask 配置
【发布时间】:2017-12-10 05:04:00
【问题描述】:

我设置了一个应用程序,尝试使用 .env 文件对其进行配置,使用 python-dotenv 加载它并使用 Config 类获取变量。如果我设置 FLASK_APP,例如:export FLASK_APP=pg.py,然后运行烧瓶,应用程序会运行,但不会加载配置。我知道环境变量是从我的 .env 文件中加载的,经过大量修改后,我意识到该应用程序是在没有上下文的情况下创建的(我认为),但我不确定如何让它这样做。如果我将 app.run() 添加到 pg.py 的末尾,它会起作用,但我知道这不是我应该做的。我已经阅读了这个页面:http://flask.pocoo.org/docs/0.12/cli/ 好几次,我不能完全按照它来获得我想要的东西。我尝试 export FLASK_CONFIG=development 作为我的最后一次尝试,看看它是否能正常工作,但它没有。所以我的问题是,我如何使用flask run,并让它正确运行我的应用程序,而不是运行'python pg.py'

编辑:我注意到一切正常,除了配置。不知道我错过了什么。根据我的阅读,我觉得 FLASK_CONFIG=development 应该可以工作。就好像应用程序是使用 'app = Flask(name)' 创建的,跳过配置加载,然后进入蓝图注册。为什么?我知道我可以在运行之前导出我所有的敏感信息,并且这样做,但现在我一直在试图找出问题,并且在我理解之前无法放手:/

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

app/__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)

【问题讨论】:

  • 也许我的回答here 可能会有所帮助!

标签: python flask


【解决方案1】:

IRC #pocoo 的一位好心人帮助我看到了光明。答案很简单。 .env 需要在导入 create_app 之前加载,create_app 也会导入配置文件。

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'))

【讨论】:

  • 这对我没有帮助
猜你喜欢
  • 1970-01-01
  • 2022-07-08
  • 2016-04-21
  • 1970-01-01
  • 2017-08-18
  • 2019-11-28
  • 2022-11-19
  • 2020-02-27
相关资源
最近更新 更多