如何使用admin更改settings.py变量?

时间:2016-03-18 22:07:11

标签: python django smtp

我正在"联系我们" Django中的页面。我想允许管理员更改smtp中的namepasswordportdjango admin

因此,可以通过admin_contact页面修改表格admin。问题是我不知道如何设置EMAIL_HOST,EMAIL_PORT,EMAIL_HOST_USER和 settings.py内的EMAIL_HOST_PASSWORD(使用模型admin_contact)我必须设置为send_mail中的views.py方法。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:0)

这是强制解决方案,但它解决了我的问题。

  1. 使用表单中的信息(电子邮件,密码,smtp等)生成文件(email_config.py)。
  2. email_config.py

    CONFIG_HOST = "smtp.gmail.com"
    CONFIG_EMAIL = "mail@gmail.com"
    CONFIG_PASS = "******"
    CONFIG_PORT = "587"
    
    1. 从您设置中导入email_config.py。
    2. <强> setting.py

      from email_config import CONFIG_HOST, CONFIG_EMAIL, CONFIG_PASS, CONFIG_PORT
      
      ...
      
      EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
      EMAIL_USE_TLS = True
      # G-mail
      EMAIL_HOST = CONFIG_HOST
      EMAIL_HOST_USER = CUSTOM_EMAIL
      EMAIL_HOST_PASSWORD = CONFIG_PASS
      EMAIL_PORT = CONFIG_PORT
      EMAIL_FROM_EMAIL = EMAIL_HOST_USER
      DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
      SERVER_EMAIL = EMAIL_HOST_USER
      

      <强>测试

      > python manage.py shell
      > from django.core.mail import EmailMessage
      > msg = EmailMessage("Hi, man","This is a test message",to=["juan@gmail.com"])
      > msg.send()
      1
      

      Apache和mod_wgsi需要在更改信息后重新启动

答案 1 :(得分:-2)

我非常确定,您不应该/不能这样做,因为这些设置是先收集的。但也许试试这个 -

EMAIL_HOST_USER = get_host_email()

def get_host_email():
    try:
       # fetch from database and return
    except:
       return 'foo@bar.com'  # some default value

如果此方法有效,您可以尝试进行所有设置。