【问题标题】:Django : is it better to import variables from a settings.py file, or basic configuration file?Django:从 settings.py 文件或基本配置文件导入变量更好吗?
【发布时间】:2012-02-09 23:16:10
【问题描述】:

我想知道从 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

我很好奇不同方法的优缺点?直接从您的设置中导入变量会损害架构的完整性吗?

【问题讨论】:

    标签: python django configuration settings


    【解决方案1】:

    这是一个判断电话。使用设置模块是“Django 方式”,尽管您应该使用from django.conf import settings; settings.MY_SETTING,这将尊重DJANGO_SETTINGS_MODULE。但 Django 只是 Python;没有什么可以阻止您使用ConfigParser。为了只在一个地方定义这些东西,我建议将它放在 Django 设置文件中——但如果你有理由不这样做,不要这样做。

    【讨论】:

    • +1,再加上考虑如果您使用“Django 方式”,则更容易进行表达式结果的设置,即您基本上免费获得的“someMagicNumber = someMagicFunction()”。使用“配置文件”方法需要您进行额外的工作才能获得相同的功能。
    • 不这样做的一个原因可能是如果您的代码有大量非 Django 特定的代码。例如,如果您将 Django 前端添加到大型模拟代码中,以启用 Web 输入,它可能已经有一个配置系统。将其合并到settings.py 中可能是错误的。
    【解决方案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
    

    【讨论】:

    • 设置进入 settings.py。期间 这个声明有什么理由吗? OP 专门询问原因。 “因为我知道它必须”是不够的。
    • 让我们看看……理由……在 Django 文档中中没有任何地方,Django 代码库本身就是“配置”文件的想法,甚至暗示过。但是,Django、Django contrib 包以及我遇到的每个 Django 应用程序都使用设置。
    • Django wiki 说没有首选的配置方法:code.djangoproject.com/wiki/SplitSettings 虽然我同意 django 开发人员习惯于 settings.py 所以这是一个安全的默认设置。
    【解决方案3】:

    还有一个用于在 db 中动态存储设置的应用程序。也许你觉得它很有用。 django-constance

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 2011-12-27
      • 2014-03-08
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 2012-04-08
      相关资源
      最近更新 更多