【问题标题】:How to use flask configuration in instance folder and basedir如何在实例文件夹和 basedir 中使用烧瓶配置
【发布时间】:2019-02-13 05:20:10
【问题描述】:

我有以下烧瓶应用程序:

main.py

from application import create_app    
app = create_app('flask.cfg')

应用程序/init.py

def create_app(config_filename=None):
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_pyfile(config_filename)

instance/flask.cfg

import os
basedir = os.path.abspath(os.path.dirname(__file__))
SQLALCHEMY_DATABASE_URI = os.environ.get(
    'DATABASE_URL') or 'sqlite:///' + os.path.join(basedir, 'database/app.db')

此设置的问题:basedir 解析为实例文件夹,而不是我的数据库文件夹所在项目的 basedir。 处理这个问题的最佳方法是什么?

【问题讨论】:

  • 不要传入文件名。只需像对象一样导入配置文件。

标签: python flask


【解决方案1】:

__file__ 与您的文件所在的目录相同。

您在instance/flask.cfg 中使用了__file__,所以它指的是instance/,其中flask.cfg 是!

您所需要的只是回到您的项目目录,因为 您的main.py 在项目目录中

你需要做这样的事情:

basedir = os.path.abspath(os.path.join('../', os.path.dirname(__file__)))

这也行

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

【讨论】:

  • 这种感觉......错了;)但我能想到的唯一解决方案是没有一些“我还不知道的隐藏 python 魔法”
  • 它确实有效。但是使用..来提升文件夹结构是......非常基本的;)我希望有像“flask.home”或类似的东西。但当然,你的答案是正确的。
  • @Dakkar 我也在寻找类似的东西,你是对的,它很奇怪,我试图获取该目录名的目录名,但它返回相同的东西..
  • @Dakkar 更新了,这个更好,Django Settings 使用这个方法
猜你喜欢
  • 2023-02-10
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 2021-12-10
  • 1970-01-01
相关资源
最近更新 更多