2016-05-10 3 views
0

прямо сейчас у меня есть настройки электронной почты в моем setting.py но конфигурация статична:конфигурации электронной почты из формы в месте

setting.py 

#Mail configuration 
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_PORT = 587 
EMAIL_HOST_USER = '*****@gmail.com' 
EMAIL_HOST_PASSWORD = '*******' 
EMAIL_USE_TLS = True 
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER 

У меня есть один пользователь с профилем global_admin так, что мне нужно, когда global_admin - это логин на сайте, он может изменить EMAIL_HOST_USER, EMAIL_HOST, EMAIL_PORT и EMAIL_HOST_PASSWORD, используя одну форму.

Возможно использовать форму на лицевой стороне для изменения данных в файле setting.py с помощью представления? так я представляю, что это может решить, но я не знаю, возможно ли это, или мне нужно создать модель для этой конфигурации и использовать пользовательский EmailBackend?

ответ

1

Создайте новую таблицу под названием «property_variables» (любое имя).

поля

  1. property_name
  2. property_value

Вместо указания конфигурации в файле settings.py, сохраните эти данные в таблице "property_variables.

Пример:

property_name - EMAIL_BACKEND

property_value - 'django.core.mail.backends.smtp.EmailBackend'

Для избежания многократного DB хит, вы можете кэшировать эти данные в Redis или где-нибудь еще.

Если вы хотите отправить электронное письмо, а не читать данные конфигурации из файла settings.py, прочитайте его из кеша.

Если вы хотите изменить конфигурацию, откройте панель администратора и измените значения. Вы можете аннулировать кеш после обновления БД.

__init__.py

from myapp.models import MyModel 

CONFIGS = dict() 


def read_config_variables(): 
    configs = MyModel.objects.all() 
    for config in configs: 
     CONFIGS[config.propertyName] = config.propertyValue 

read_config_variables() 

settings.py

import CONFIGS 
EMAIL_BACKEND = CONFIGS.get('EMAIL_BACKEND', 'django.core.mail.backends.smtp.EmailBackend') 
EMAIL_HOST = CONFIGS.get('EMAIL_HOST', 'smtp.gmail.com') 
EMAIL_PORT = CONFIGS.get('EMAIL_PORT', 587) 
EMAIL_HOST_USER = CONFIGS.get('EMAIL_HOST_USER', '*****@gmail.com') 
EMAIL_HOST_PASSWORD = CONFIGS.get('EMAIL_HOST_PASSWORD', '*******') 
EMAIL_USE_TLS = CONFIGS.get('EMAIL_USE_TLS', True) 
+0

Но если я пытаюсь получить данные из БД в моем 'settings' файла дает мне ошибку ' Параметр SECRET_KEY не должен быть пустым', который случается, когда я использую 'from myapp.models import mymodel' –

+0

, вы перемещаете только конфигурацию электронной почты прямо? почему вы касаетесь «SECRET_KEY»? Секретный ключ является обязательным. – Anoop

+0

Да, только настройка электронной почты, я на самом деле не касаюсь 'SECRET_KEY' и не пуст. –

Смежные вопросы