2

许多框架将其配置文件保存在与程序其余部分不同的语言中。例如,Appengine 以 yaml 格式保存配置。相比之下,DJango settings.py 是一个 python 模块。我可以看到很多缺点。

如果它与程序的其余部分使用相同的语言,我可以

在配置文件中做一些有趣的事情。

 MEDIA_DIR = os.path.join(os.path.dir(__file__), 'media')
 #Or whaever the correct cals are, you get the idea.
  • 不必学习新的(公认的轻量级)格式
  • 我的工具可以按预期工作。
  • 我可以做之import conf类的。

如果它是 C/C++ 等重量级语言,我可以看到它的优势,但对于 python,它为什么有意义。这似乎只是在不增加任何好处的情况下夺走了权力。

4

5 回答 5

12

一些框架设计者认为配置文件不适合放置繁重的逻辑。正如 MVC 框架阻止您将逻辑放在不属于它的地方一样,配置文件阻止您将编程放在不属于它的地方。

这是品味和哲学的问题。

也就是说,我更喜欢 Django 的方法。

于 2009-10-29T09:03:45.023 回答
5

Python 可能并不总是 appengine 运行的唯一语言。因此,相同的 yaml 配置文件可以驱动用例如 java 或 perl 编写的 appengine 应用程序

于 2009-10-29T09:06:07.303 回答
5

有时您需要使用自动/GUI 工具来解析和/或生成和/或修改配置文件。如果您的 conffile 是 python 脚本,这并不容易。

于 2009-10-29T09:47:22.693 回答
2

有一个很好的理由:如果您的程序分布在不安全的环境中,例如用户计算机,执行一个如此容易修改的文本文件是许多病毒的大门。对于应用程序托管在服务器上的 django 应用程序来说,情况并非如此 - 一个安全的环境。但是对于使用 py2exe 在 Windows 上分发的应用程序,您应该避免让您的程序执行随机的东西。

使用 YAML 之类的语法的另一个原因是您可以使用其他工具甚至其他语言来操作文件,该格式具有可移植性和足够的文档记录。

也就是说,当我需要一个带有 python 程序的配置文件时,我会使用带有一些安全措施的 python 字典:

  • 删除封闭的 { } 使其不会直接评估为 python 表达式
  • use of safe_eval to discard any executable item.
于 2009-10-29T09:55:23.230 回答
-1

他们可能只是没有想到他们可以做到。许多程序员来自脚本语言很慢而且并不比编程语言更简单的旧时代(看看 Unix shell 之类的东西)。当漂亮的动态语言出现时,他们只是坚持使用“纯文本配置文件”,因为这是他们一直在做的事情。

于 2009-10-29T09:19:29.617 回答