【问题标题】:Django settings - dynamic value for DEFAULT_FROM_EMAILDjango 设置 - DEFAULT_FROM_EMAIL 的动态值
【发布时间】:2015-09-20 09:55:50
【问题描述】:

我希望能够从管理员更改发件人电子邮件地址。但是,默认发件人电子邮件在settings.pyDEFAULT_FROM_EMAIL 中指定。

实现这一目标的好方法是什么?

编辑:
这里的主要问题是DEFAULT_FROM_EMAIL 被我项目中包含的第三方应用程序使用,出于显而易见的原因,我想避免弄乱他们的代码......

【问题讨论】:

    标签: django django-settings django-email


    【解决方案1】:

    不要将 settings.py 用于动态设置。有一个很棒的应用程序:

    【讨论】:

    • 不错的应用程序,但我认为它不会覆盖 settings.py 中的值。我很想使用它,但问题是 DEFAULT_FROM_EMAIL 被其他应用程序使用,例如contrib.auth 和其他一些,所以我的选择是有限的。
    • 不,它不会覆盖settings.py 中的值。我认为您不能在运行时更新这些设置(如果您对其进行测试,请记住使用生产设置)。我知道您不想弄乱其他应用程序,但更改身份验证电子邮件并不难,而且您可能希望在某个时候个性化它们......
    【解决方案2】:

    尚未对此进行测试,但我认为这可能是解决此特定问题的一种方法。这似乎可以很好地解决问题。欢迎评论!

    from UserString import UserString
    
    def get_dynamic_sender():
        return "Sender A"  # expand here...
    
    class DynamicEmailValue(UserString):
        _data = None
        @property
        def data(self):
            return self._data.format(name=get_dynamic_sender())
        @data.setter
        def data(self, value):
            self._data = value
    

    这个类的实例的行为就像普通的字符串:

    >>> DEFAULT_FROM_EMAIL = DynamicEmailValue('{name} <some.mail@example.com>')
    
    >>> DEFAULT_FROM_EMAIL
    'Sender A <some.mail@example.com>'
    
    >>> "sent by " + DEFAULT_FROM_EMAIL + " two days ago"
    'sent by Sender A <some.mail@example.com> two days ago'
    
    >>> "from: {}".format(DEFAULT_FROM_EMAIL)
    'from: Sender A <some.mail@example.com>'
    
    >>> "from: %s" % DEFAULT_FROM_EMAIL
    'from: Sender A <some.mail@example.com>'
    
    >>> dynamic_sender = "Sender B"
    
    >>> "from: %s" % DEFAULT_FROM_EMAIL
    'from: Sender B <some.mail@example.com>'
    

    注意:

    • 仅适用于 Python 2.x
    • 未使用 Django 进行 100% 测试(设置可能在某些地方被缓存等)
    • 在初始化 (DEFAULT_FROM_EMAIL = 'new value') 后为其分配一个新值会使整个事物静音,除非新值还包含 {name}。但是设置不应该被写入,所以这可能不会发生......希望......是的......

    【讨论】:

      猜你喜欢
      • 2011-04-14
      • 2012-04-25
      • 2018-10-07
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 2015-10-22
      • 2012-09-05
      相关资源
      最近更新 更多