Django:从settings.py文件导入变量还是基本配置文件更好?
我在想,把变量从settings.py文件导入到视图中,是否更好?还是说创建一个配置文件,把需要的变量放在里面更好呢?
我个人比较喜欢为我的Django应用写配置文件,然后在需要的时候读取并导入那些变量。例如:
.configrc
[awesomeVariables]
someMagicNumber = 7
views.py
from ConfigParser import SafeConfigParser
#Open and parse the file
config = SafeConfigParser()
config.read(pathToConfig)
#Get variable
magicNumber = config.get('awesomeVariables', 'someMagicNumber'))
不过,我注意到有些程序员更喜欢这样做:
settings.py
SOME_MAGIC_NUMBER=7
views.py
import settings
magicNumber = settings.SOME_MAGIC_NUMBER
我很好奇这两种方法的优缺点是什么?直接从settings导入变量,会不会影响架构的完整性呢?
3 个回答
1
还有一个应用可以动态地把设置存储到数据库里。也许你会觉得这个很有用。django-constance
2
使用配置文件在Django中是不太常见的。所有的设置都应该放在settings.py文件里。就是这么简单。如果你有一些特定于某个应用的设置,你可以在你的应用里设置一个默认值,然后让用户在他们自己的settings.py文件中进行覆盖:
from django.conf import settings
SOME_MAGIC_NUMBER = settings.SOME_MAGIC_NUMBER if hasattr(settings, 'SOME_MAGIC_NUMBER') else 0
# Where `0` is the default value
6
这其实是个判断的问题。使用设置模块是“Django的做法”,不过你应该用 from django.conf import settings; settings.MY_SETTING
这种方式来获取设置,这样可以遵循 DJANGO_SETTINGS_MODULE
的规则。但Django本质上就是Python,没什么能阻止你使用 ConfigParser
。为了方便管理,我建议把这些设置放在Django的设置文件里,但如果你有其他理由不这样做,那也没关系。