Python中的真正全局变量用于程序范围设置

3 投票
1 回答
2224 浏览
提问于 2025-04-17 13:33

我在我的主执行文件里有这些内容:

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项目的一个惯例。

撰写回答