目前我的manage.py
文件已经过硬编码,可以导入我的local.py
- 开发设置文件。这是设置此问题的“行业标准”方式吗?当我部署到服务器时,我只是将manage.py
更改为指向我的生产设置文件吗?或者我应该以另一种方式设置它?
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
# Hard coded imports local settings file
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.local")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
结构:
project/
manage.py
settings/
local.py
shared.py
production.py
答案 0 :(得分:2)
没有。 manage.py对于在生产中运行Django没有任何帮助,所以更改它根本不会有任何帮助。
答案 1 :(得分:1)
我认为您希望尽可能避免编辑manage.py.
另一种处理方法是使用默认的settings.py
文件,但要使用第二个local_settings.py
文件对其进行扩展。
您可以将以下内容放在settings.py文件的末尾:
locset = os.path.join(os.path.dirname(__file__), 'local_settings.py')
if os.path.exists(locset):
with open(locset) as f:
code = compile(f.read(), "local_settings.py", 'exec')
exec(code)
我通常将DEBUG和数据库设置保留在此local_settings.py
文件中。
执行此操作时,您应确保将local_settings.py
添加到.gitignore
。
我还将此文件的示例版本与settings.py
文件一起添加为local_settings.py.sample
减去任何敏感密码/用户名信息。
这个文件包含在repo中,所以新的人可以创建他们的数据库/用户,只需填写缺少的部分。他们只需要将它重命名为.sample扩展名,它们就可以了。
这是一种简单有效的方法,可以为不同的环境设置变体设置,无论是本地,生产还是本地团队成员之间。
答案 2 :(得分:0)
我的应用程序有一个设置文件,但是这些值是从配置文件中读取的,而不是硬编码的。例如,DATABASES部分如下所示:
import ConfigParser
config = ConfigParser.ConfigParser()
config.read('app.conf')
DATABASES = {
'default': {
'ENGINE': config.get('database', 'engine'),
'NAME': config.get('database', 'name'),
'USER': config.get('database', 'user'),
'PASSWORD': config.get('database', 'password'),
'HOST': config.get('database', 'host'),
'PORT': config.get('database', 'port'),
}
}
开发和生产服务器各自获得自己的app.conf
文件(从版本控制中排除这是一个很好的附带好处)。