【发布时间】:2010-12-22 11:22:36
【问题描述】:
在 Django 中,设置存储在文件 settings.py 中。该文件是代码的一部分,并进入存储库。只有开发人员处理此文件。管理员处理模型,数据库中的数据。这是非开发人员编辑的数据,网站访问者在模板中看到的呈现。
问题是,我们的网站和许多其他网站都有很多设置选项,非开发人员应进行编辑。我们谈论的是在数据库中确实没有位置的独立站点范围的常量。将它们放入数据库将导致大量无意义的查询。缓存可以缓解这种情况,但是处理 settings.py 文件中的一行可以完成的事情似乎不必要地复杂。
我确实注意到了this dbsettings app,但它很旧且无人维护。我还注意到 django 电子商务应用程序 Satchmo 包含此 dbsettings 应用程序的特定用例分支。我们可以在我们的网站中构建类似的东西,一个将一些设置作为键/值对存储在单个数据库表中的应用程序,但这似乎真的是错误的方法。为什么要在数据库中放一些不属于那里的东西只是为了让非开发人员更容易编辑?
我们的 Django 站点上有一个站点范围的设置列表,我们希望非开发人员管理员可以编辑这些设置。解决这个问题的最佳方法是什么?
【问题讨论】:
-
+1 因为知道这一点可以更轻松地在 VCS 中管理 Django 项目。开发人员必须小心,否则不要将本地更改提交到 settings.py。
-
缓存将缓解这种情况(当将本地设置放入数据库时)每个 django 进程实例只有一个查询。
-
要重新启动服务器以重新加载设置,您只需调用“touch site.wsgi”文件,例如使用 cron 作业,但这只有在您的 wsgi 进程以守护程序模式运行时才有效
-
提供一些您正在谈论的管理员设置类型的示例可能会有所帮助。
settings.py用于部署时配置,因此显然与您在运行时尝试执行的操作存在阻抗不匹配。完全摒弃数据库驱动的解决方案对我来说似乎是过早的优化。