Django 设置 - DEFAULT_FROM_EMAIL 的动态值

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

https://github.com/jezdez/django-constance http://django-constance.readthedocs.org/en/latest/

【讨论】:

不错的应用程序,但我认为它不会覆盖 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。但是设置不应该被写入,所以这可能不会发生......希望......是的......

【讨论】:

以上是关于Django 设置 - DEFAULT_FROM_EMAIL 的动态值的主要内容,如果未能解决你的问题,请参考以下文章

django 2.x + celery 4.2.x 配置文件 设置

Django - 如何设置 forms.FileField 名称

Django 设置:如何从应用程序的设置文件夹中访问变量

Django 表单 - 设置标签

在 Python/Django 中,如何配置默认测试设置?

Django_设置静态文件上传文件