Python 如何从Flask中的配置文件导入?
我遵循了我的烧瓶项目的布局 我的结构如下:Python 如何从Flask中的配置文件导入?,python,python-2.7,flask,Python,Python 2.7,Flask,我遵循了我的烧瓶项目的布局 我的结构如下: app/ __init__.py views.py forms.py myFile.py run.py config.py 在views.py、forms.py中,我可以使用 from config import basedir 但是我不能在myFile.py中使用它 我补充说 import Flask 当我修改它时,Flask web服务器重新启动,但它没有说在app/myFile.py中找到了更改。重新启动它
app/
__init__.py
views.py
forms.py
myFile.py
run.py
config.py
在views.py、forms.py中,我可以使用
from config import basedir
但是我不能在myFile.py中使用它
我补充说
import Flask
当我修改它时,Flask web服务器重新启动,但它没有说在app/myFile.py中找到了更改。重新启动它只是重新启动
我需要做什么才能使用
from config import basedir
在我的python文件中。我看不到在forms.py的\uuuu init\uuuuuuuuuy.py
中做了什么特别的事情
编辑:这是我的\uuuu init\uuuu.py
文件:
from flask import Flask
from config import basedir
app = Flask(__name__)
app.config.from_object('config')
from app import views
当人们在Flask中谈论配置时,他们通常谈论的是将值加载到应用程序的配置中。在上面的示例中,在
init.py
文件中可以有类似于app.config.from_object('config')
的内容。然后,所有配置值都将加载到app.config
字典中
然后,在任何文件中,您都可以导入app对象以访问该字典。我倾向于访问
app
对象,方法是从flask将当前的应用程序导入为app,然后只需app.config['MY\u SETTING']
获取我关心的值 经过一点修改(以及“net”的一点帮助),我可以通过将代码更改为包含配置来进一步改进:
app.config.from_object('config.ProductionConfig')
这为以下配置启用了此酷模式:
class Config(object):
DEBUG = True
DEVELOPMENT = True
SECRET_KEY = 'do-i-really-need-this'
FLASK_HTPASSWD_PATH = '/secret/.htpasswd'
FLASK_SECRET = SECRET_KEY
DB_HOST = 'database' # a docker link
class ProductionConfig(Config):
DEVELOPMENT = False
DEBUG = False
DB_HOST = 'my.production.database' # not a docker link
现在剩下的是看看如何将测试配置集成到这其中,但至少感觉不那么笨拙。我在flask项目根文件夹中创建了一个config.json文件,如下所示:
with open('config.json') as config_file:
config_data = json.load(config_file)
config.json
只需在我们想要访问配置值的地方添加下面的代码。例如,我将在app.py中使用如下内容:
with open('config.json') as config_file:
config_data = json.load(config_file)
第一个导入json库:
import json
然后打开文件,读取json并将其存储在如下变量中:
with open('config.json') as config_file:
config_data = json.load(config_file)
在创建一个名为appapp=Flask(\uuuuu name\uuuu)
的Flask应用程序后添加下面的代码,以访问config.json-configuration值
# mail configuration
mail_settings = config_data['mail_settings']
app.config.update(mail_settings)
# database configuration
db_settings = config_data['database']
app.config.update(db_settings)
我在init.py文件中有app.config.from_对象('config')。你知道为什么“从配置导入basedir”在views.py和forms.py中工作吗?谢谢。在文件里。没有解释如何从其他文件访问配置设置。对象如何知道配置模块?我有
配置
模块和初始化
模块。我一直收到此错误:ImportStringError:import\u string()对于'config.ProductionConfig'失败。
我看到了相同的错误。我的可安装应用程序代码位于app/src/myapp/
中,我的\uuuu init\uuuu.py
也位于该位置。因此,INSTANCE\u路径
是app/src/INSTANCE/
。你能修复这个@Ciastopiekarz吗?这里应该是app.config.from_object('config.ProductionConfig')
而不是app.config.from_object(config.ProductionConfig)
其中config
是config
类的一个实例?@greg No,from_object
获取一个字符串,然后用于动态导入模块。看见是的,它的名字不好,而且很混乱。另外,使用字符串引用模块也不是最好的主意——这会降低IDE跟踪使用情况的能力;这不酷。这是代码还是配置?代码和配置应该分开。在否决表决之前,我的要求是我们必须解释错误的部分@Siva,在Flask应用程序中,我们可以在根文件夹中为配置创建config.py文件。OP&每个人都在讨论config.py文件。很抱歉,当我开始创建配置文件时,我没有正确检查文档,无论我在项目中使用哪个文档进行配置,@sarathlan Tnx to you,我现在可以理解我的错误了。