簡體   English   中英

動態settings.py

[英]Dynamic settings.py

我已經將django-constance用作庫。 盡管我注意到的一件事是,當我嘗試使用ADMINMANAGER

CONSTANCE_CONFIG = {
'ADMINS': ([('Errors', 'admin@gmail.com')], 'Admin Emails'),
}

發送電子郵件不起作用。

在MANAGER中,我已經嘗試過:

MANAGER = CONSTANCE_CONFIG['ADMINS'][0]

仍然發送電子郵件不起作用。 我錯過了一個錯誤的實現嗎? 或者,您可以建議其他任何可以在settings.py覆蓋ADMINMANAGER庫。 我正在使用Django 1.8.5和Python 3。

當嘗試導入settings.py內部時,也會產生錯誤。

1#也許您已經知道, django-constance不支持元組。 基本上,很難在您的情況下專門為元組檢測小部件。 可以added/deleted ADMINS,這樣就可以通過single widget使它動態化.. !!(想想所有django窗口部件)。 因此,這里CONSTANCE_ADDITIONAL_FIELDS也將不起作用。

2#我認為您誤解了django constance的工作原理。 它不會刷新您的django server 因此, MANAGER = CONSTANCE_CONFIG['ADMINS'][0]完全錯誤(即使使用CONSTANCE_ADDITIONAL_FIELDS )。 您在此處訪問constant (非動態)。 您需要像訪問

from constance import config
print(config.ADMINS)

3#默認日志記錄配置對mail_admins使用AdminEmailHandler類, mail_admins使用django settings ADMINS值,而不是constance config

因此,一種可能的解決方案可能是創建您自己的handler類,該handler類將使用constance config ADMINS值。 因此,將您的setting.py更改為

CONSTANCE_CONFIG = {
    'ADMIN1': ('admin@gmail.com', 'This one will receive error on 500'),
} # you can add as many admins as you want with ADMIN1, ADMIN2 etc(no tuple) 

然后創建自己的處理程序類,它將使用CONSTANCE_CONFIG

from django.utils.log import AdminEmailHandler
from constance import config
from django.conf import settings
from django.core.mail.message import EmailMultiAlternatives


class ConstanceEmailHandler(AdminEmailHandler):
    def send_mail(self, subject, message, html_message=None, fail_silently=False, *args, **kwargs):
        # create a list of ADMIN emails here, if you have more then one ADMIN
        mail = EmailMultiAlternatives('%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject),
                                  message, settings.SERVER_EMAIL, [config.ADMIN1],
                                  connection=self.connection())
        if html_message:
            mail.attach_alternative(html_message, 'text/html')
        mail.send(fail_silently=fail_silently)

然后更改您的LOGGER配置。 如果您沒有自定義的LOGGING設置,建議您從django.utils.log (DEFAULT_LOGGING)復制默認的記錄器配置。 並將mail_admins更改為

'mail_admins': {
    'level': 'ERROR',
    'filters': ['require_debug_false'], # change it to require_debug_true if you want to test it locally.
    'class': '<yourproject>.<yourfile>.ConstanceEmailHandler', # path to newly created handler class
    'include_html': True
    },

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM