Python中的真正全局变量用于程序范围设置
我在我的主执行文件里有这些内容:
databaseUrl = appPath + '/db/timey.db'
这些内容指向我的SQLite数据库。
我对访问我的模型(数据/数据库)做了一些封装。所以在数据库URL最终被使用之前,我需要从主文件传递它到view.py,再到model.py,最后到db.py。这样做很傻,因为我的视图类其实并不需要知道我的数据库或者它的路径。那么,有什么好的方法可以让这个路径“全局”可用,而不需要一直传来传去呢?
我试着把databaseUrl设为全局变量,但我不太喜欢这个想法,而且实际上也没能成功。
把信息存储在外部文件里就有点过头了,因为反正它只是唯一的(常量!)全局变量。
谢谢!
1 个回答
6
我觉得把它存放在一个外部文件里并不是多余的做法。其实有一个设置或配置文件是很有帮助的。
# settings.py
import os
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
DATABASE_URL = ''
DATABASE_USER = ''
DATABSE_PASSWORD = ''
等等。
from myproject import settings
settings.DATABASE_URL
这就是django和scrapy用来存储项目数据库配置设置和其他项目设置的方法。
另外,如果你有一个数据库类,把这些设置放在里面也许是个好主意?我不太确定。
settings.py文件让你可以轻松设置开发或本地数据库的地址。要做到这一点,你可以创建一个local_settings.py
文件,这个文件不会被纳入版本控制,也不会打包到你的项目里。
在你的settings.py文件中
try:
from local_settings import *
except ImportError:
pass
然后在local_settings.py里,你可以把DATABASE_URL改成你的开发数据库的地址!!这是django项目的一个惯例。