Apr*_*che 9 python django settings
在Django中,设置存储在settings.py文件中.该文件是代码的一部分,并进入存储库.只有开发人员处理此文件.管理员处理模型,数据库中的数据.这是非开发人员编辑的数据,以及网站访问者在模板中看到的数据.
问题是,我们的网站和许多其他网站都有许多设置选项,应该由非开发人员编辑.我们讨论的是独立的站点范围常量,它们在数据库中确实没有位置.将它们放入数据库将导致许多无意义的查询.缓存可以缓解这种情况,但是在设置settings.py文件中的单行处理时,这似乎不必要地复杂.
我确实注意到了这个dbsettings应用程序,但它已经过时且没有维护.我还注意到django电子商务应用程序Satchmo包含了这个dbsettings应用程序的用例特定分支.我们可以在我们的站点中构建类似的东西,一个将一些设置作为键/值对存储在一个数据库表中的应用程序,但它看起来真的是错误的方法.为什么在不属于那里的数据库中添加一些内容只是为了让非开发人员更容易编辑?
我们在Django网站上有一个站点范围的设置列表,我们希望非开发人员管理员可以编辑这些设置.解决这个问题的最佳方式是什么?
像dbsettings(正如你所提到的)似乎是要走的路.从该项目存在的原因:
并非所有设置都属于
settings.py
,因为它有一些特殊限制:
设置是项目范围的.这不仅要求应用程序混乱
settings.py
,还会增加命名冲突的可能性.在整个Django实例中,设置是不变的.如果不重新启动应用程序,则无法更改它们.
设置需要程序员才能进行更改.即使设置对其他任何事物没有任何功能影响,也是如此.
如果dbsettings不适合你,那么实现你自己的,或分叉它.看起来好像太难了.
我实际上是dbsettings的忠实粉丝,并且有意义发布我的fork,它修补它以使用Django 1.1(实际上并不是一个很大的变化).看起来有人已经更新了它.
但是,你可能是对的,这对你所需要的东西来说太过分了.我之前做过的一件事是在settings.py的末尾添加一行,用于导入和解析YAML文件.YAML是一种简单的标记语言,最基本的只是KEY: VALUE
......
CONSTANT1: MyValue
CONSTANT2: Anothervalue
Run Code Online (Sandbox Code Playgroud)
如果你把它放在某个地方,编辑可以访问它,那么在settings.py结束时你只需:
import yaml
try:
globals().update(yaml.load(open('/path/to/my/yaml/file.yml')))
except:
pass
Run Code Online (Sandbox Code Playgroud)
您需要Python YAML库来解析YML文件.
这种方法的缺点是你需要重新启动Apache才能让它获得更改.
编辑添加构建可以编辑此文件的前端并提供一个运行脚本以重启Apache的按钮并不是特别困难.