我已经从http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world跟踪了我的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中发现的更改重新启动它只是重新启动。
我需要做什么才能使用
from config import basedir
在我的python文件中。我没有在__init__.py
中看到form.py。
编辑:这是我的__init__.py
文件:
from flask import Flask
from config import basedir
app = Flask(__name__)
app.config.from_object('config')
from app import views
答案 0 :(得分:50)
当人们谈论Flask中的配置时,他们通常都在谈论将值加载到应用程序的配置中。在上面的示例中,您的app.config.from_object('config')
文件中可能包含init.py
。然后,所有配置值都将加载到app.config
字典中。
然后,在您的任何文件中,您只需导入应用程序对象即可访问该词典。我倾向于通过app
访问from flask import current_app as app
对象,然后只需app.config['MY_SETTING']
来获取我关心的值。 Read up more in the documenation
答案 1 :(得分:18)
经过一些小小的摆弄(以及来自网络的一点帮助),我可以通过更改代码以包含配置来进一步改进:
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
现在剩下的就是看看如何将测试配置集成到这里,但至少它感觉不那么笨拙。
答案 2 :(得分:0)
我在我的烧瓶项目-根文件夹中创建了一个config.json文件,如下所示:
config.json
{
"mail_settings":{
"MAIL_SERVER": "smtp.gmail.com",
"MAIL_PORT": 465,
"MAIL_USE_TLS": "False",
"MAIL_USE_SSL": "True",
"MAIL_USERNAME": "your_mail@gmail.com",
"MAIL_PASSWORD": "your_password"
},
"database":{
"MYSQL_HOST":"localhost",
"MYSQL_USER": "user_name",
"MYSQL_PASSWORD":"password",
"MYSQL_DB":"database_name"
}
}
,然后在要访问配置值的位置添加以下代码。例如,我将在如下的app.py中使用:
第一个导入烧瓶json库:
import json
第二次打开文件以将json读取并存储在如下所示的变量中:
with open('config.json') as config_file:
config_data = json.load(config_file)
在创建名为应用程序app = Flask(__name__)
的Flask应用程序后,添加以下代码,以访问config.json-配置值。
# 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)