2016-05-10 10 views
0

Im Moment habe ich die E-Mail-Konfiguration in meinem setting.py aber die Konfiguration ist statisch:E-Mail-Konfiguration aus einem Formular auf der Website

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 

Ich habe einen Benutzer mit dem Profil global_admin so, was ich brauche ist, wenn die global_admin sind Login in der Website er könnte die EMAIL_HOST_USER, EMAIL_HOST, EMAIL_PORT und EMAIL_HOST_PASSWORD mit einem Formular ändern.

Ist es möglich, ein Formular im Frontend zu verwenden, um die Daten in der Datei setting.py mit einer Ansicht zu ändern? das ist die Art, wie ich mir vorstelle, dass dies gelöst werden könnte, aber ich weiß nicht, ob es möglich ist, oder ich muss ein Modell für diese Konfiguration erstellen und eine benutzerdefinierte EmailBackend verwenden?

Antwort

1

Erstellen Sie eine neue Tabelle namens 'property_variables' (beliebiger Name).

Felder

  1. property_name
  2. property_value

Statt Konfigurationen in settings.py Datei angeben, diese Details in 'property_variables' Tabelle speichern.

Beispiel:

property_name - EMAIL_BACKEND

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

Für mehrere DB-Hit zu vermeiden, können Sie diese Details in redis zwischenzuspeichern oder irgendwo anders.

Wenn Sie E-Mails senden möchten, lesen Sie die Konfigurationsdetails aus der Datei settings.py aus dem Cache.

Wenn Sie die Konfiguration ändern möchten, öffnen Sie das Admin-Panel und ändern Sie die Werte. Sie können den Cache nach der DB-Aktualisierung ungültig machen.

__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

Aber wenn ich versuche, die Daten aus der DB zu bekommen in meinem 'Einstellungen' Datei ist mir ein Fehler ' Die Einstellung SECRET_KEY darf nicht leer sein. Das passiert, wenn ich 'from myapp.models import mymodel' verwende. –

+0

Sie verschieben nur die E-Mail-Konfiguration richtig? Warum berührst du 'SECRET_KEY'? Der geheime Schlüssel ist obligatorisch. – Anoop

+0

Ja, nur die E-Mail-Konfiguration, ich habe den 'SECRET_KEY' nicht berührt und ist nicht leer. –