代码之家  ›  专栏  ›  技术社区  ›  David Berger

将代码放在python配置文件中有礼貌吗?

  •  9
  • David Berger  · 技术社区  · 16 年前

    我的问题是,这些界限到底是什么?我个人的启发是

    1. 避免流量控制。没有函数、循环或条件。这些内容不会在文本配置文件中,人们也不希望理解它们。一般来说,语句的执行顺序可能并不重要。
    2. 坚持文字赋值。对象上调用的方法和函数更难思考。任何含蓄的东西都会一团糟。如果您的参数出现了一些复杂的情况,请更改它们的解释方式。
    3. 语言关键字和错误处理是正确的。

    我想我问这个问题是因为我在Django配置文件中遇到了一种情况,打破这些规则似乎很有用。我碰巧喜欢,但我觉得有点内疚。基本上,我的项目是通过svn签出部署到两个不同的服务器上的,这些服务器的配置不尽相同(例如,有些服务器将共享一个数据库,有些服务器将不共享)。所以,我在最后扔了一个钩子:

    try:
        from settings_overrides import *
        LOCALIZED = True
    except ImportError:
        LOCALIZED = False
    

    其中设置\u覆盖位于python路径上,但在工作副本之外。您对这个示例或python配置边界的总体看法如何?

    5 回复  |  直到 16 年前
        1
  •  11
  •   vartec    16 年前

    这里有一个Django wiki页面,它完全满足了您的要求。 http://code.djangoproject.com/wiki/SplitSettings

    configparser 和INI文件。Python文件很容易被不懂Python的人破坏。

        2
  •  4
  •   Adam Davis    16 年前

    尽管如此,我还是忍不住想知道站点检查代码应该在解析器中,并且添加了一个额外的配置项来选择应该采用哪个选项。

    我不认为在这种情况下,替代方案是如此糟糕以至于违反规则是有意义的。。。

        3
  •  4
  •   Oli    16 年前

    不是

    至于你的例子,差不多了 本质的 供开发人员测试并部署其应用程序。肯定是快乐多于痛苦。但你真的应该这样做:

    LOCALIZED = False
    
    try:
        from settings_overrides import *
    except ImportError:
        pass
    

    在您的设置_overrides.py文件中:

    LOCALIZED = True
    

    ... 如果只是为了弄清楚那个文件是干什么的。。您在那里所做的将覆盖拆分为两个位置。

        4
  •  1
  •   Jarret Hardie    16 年前

    作为一般做法,请参见页面上的其他答案;这要看情况而定。但是,特别是对于Django,我认为在settings.py文件中编写代码没有什么根本性的错误。。。毕竟,设置文件的代码是:-)

    这个 Django docs on settings themselves 说:

    并举例说明:

    assign settings dynamically using normal Python syntax. For example:
    MY_SETTING = [str(i) for i in range(30)]
    
        5
  •  1
  •   Heikki Toivonen    16 年前

    设置为代码也是一种安全风险。您导入了“配置”,但实际上您正在执行该文件中的任何代码。将配置文件放在您首先解析的文件中,您可以拒绝无意义的或恶意的值,即使这对您来说需要更多的工作。我 blogged