他们需要访问数据库。该访问将通过数据库后端进行,后端可以是Django或one from a third party附带的数据库后端。
我在我的Django站点的settings.py
中做过的一件事是从/etc
中的文件加载数据库访问信息。这样,每台机器的访问设置(数据库主机,端口,用户名,密码)可能不同,而密码等敏感信息不在我的项目存储库中。您可能希望以类似的方式限制对工作人员的访问,方法是使用不同的用户名连接。
您也可以通过环境变量传递数据库连接信息,甚至传递配置文件的键或路径,并在settings.py
中处理它。
例如,这里就是我拉我的数据库配置文件:
g = {}
dbSetup = {}
execfile(os.environ['DB_CONFIG'], g, dbSetup)
if 'databases' in dbSetup:
DATABASES = dbSetup['databases']
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
# ...
}
}
不用说,你需要确保在DB_CONFIG
文件是无法访问到任何用户除了数据库管理员和Django的本身。默认情况下应该将Django引用到开发人员自己的测试数据库中。使用ast
模块代替execfile
也可能有更好的解决方案,但我还没有研究它。
我做的另一件事是使用单独的用户数据库管理任务与其他一切。在我manage.py
,我增加了以下序言:
# Find a database configuration, if there is one, and set it in the environment.
adminDBConfFile = '/etc/django/db_admin.py'
dbConfFile = '/etc/django/db_regular.py'
import sys
import os
def goodFile(path):
return os.path.isfile(path) and os.access(path, os.R_OK)
if len(sys.argv) >= 2 and sys.argv[1] in ["syncdb", "dbshell", "migrate"] \
and goodFile(adminDBConfFile):
os.environ['DB_CONFIG'] = adminDBConfFile
elif goodFile(dbConfFile):
os.environ['DB_CONFIG'] = dbConfFile
凡/etc/django/db_regular.py
的配置是与只访问Django的数据库与SELECT,INSERT,UPDATE用户和DELETE和/etc/django/db_admin.py
是与用户这些权限加上CREATE,DROP,INDEX,ALTER和LOCK TABLES。 (该migrate
命令是从South)。这使我从Django的代码我在运行时模式搞乱了一些保护,并限制了损坏的SQL注入攻击可能会导致(虽然你还是应该检查并过滤所有用户输入)。
这不是一个解决你的确切问题,但它可能会给你一些想法,以便为你的目的来加快Django的数据库访问设置。
谢谢!我认为这是确保我的数据库登录处于最佳状态的好方法。 – dotmoo 2010-10-07 19:05:22
您可能也想以类似的方式将“SECRET_KEY”设置存储在'settings.py'文件之外。 – 2010-10-07 20:38:51