在Python/Flask应用中存储数据库位置和凭证变量
我正在学习一个关于如何用Python和Flask构建应用的在线教程。在我安装Postgres并弄乱我的数据库之前,我可以毫无问题地从命令行启动我的应用。但现在,每次我重启命令提示符时,都必须重新定义APP_SETTINGS和DATABASE_URL这两个变量。虽然在我重新定义这些变量后,应用可以正常工作,但我知道这不是正确的做法。下面是我遇到的错误:
Traceback (most recent call last):
File "app.py", line 12, in <module>
app.config.from_object(os.environ['APP_SETTINGS'])
File "C:\envs\acme\lib\os.py", line 423, in __getitem__
return self.data[key.upper()]
KeyError: 'APP_SETTINGS'
然后我会用“set”命令重新定义这个变量:
set APP_SETTINGS=config.DevelopmentConfig
这是我在app.py和config.py中使用的代码:
config.py:
import os
# default config
class BaseConfig(object):
DEBUG = False
SECRET_KEY = 'secret key'
SQLALCHEMY_DATABASE_URI = os.environ['DATABASE_URL']
class DevelopmentConfig(BaseConfig):
DEBUG = True
class ProductionConfig(BaseConfig):
DEBUG = False
app.py:
import os
app.config.from_object(os.environ['APP_SETTINGS'])
在config.py文件中,DATABASE_URL变量也是同样的问题。我还遇到了KEYERROR错误,必须用“set”命令重新定义这个变量,并且还要输入我的用户名和密码:
set DATABASE_URL=postgres://username:password@localhost/discover_flask_dev
我使用的是Windows 8和Python 2.7。在我的环境中安装了这些工具:
Flask==0.10.1
Flask-SQLAlchemy==2.0
Jinja2==2.7.3
MarkupSafe==0.23
SQLAlchemy==0.9.8
Werkzeug==0.9.6
gunicorn==19.1.1
ipython==2.3.0
itsdangerous==0.24
psycopg2==2.5.2
pyreadline==2.0
我想应该有一个基本的方法来解决我上面提到的问题。请给点建议。谢谢!
1 个回答
1
你的主要问题似乎是“每次我重启命令提示符时,都必须重新定义APP_SETTINGS和DATABASE_URL这两个变量”。
根据这个超级用户的回答,看起来有两个环境变量的命令:SET(在命令窗口关闭时会失效)和SETX(在命令窗口关闭后仍然有效)。
你可以用
set DATABASE_URL=postgres://username:password@localhost/discover_flask_dev
来设置变量,但这样做每次重启后都会失效。
试试用
setx DATABASE_URL "postgres://username:password@localhost/discover_flask_dev"
注意这两者的语法稍有不同:SETX使用双引号".."
,而且不需要等号=
。