From b3cffde5559c4fa97625512d7ec41a674be26076 Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Fri, 13 Apr 2018 13:18:53 -0700 Subject: Fixed #29324 -- Made Settings raise ImproperlyConfigured if SECRET_KEY is accessed and not set. --- django/conf/__init__.py | 11 ++++++++--- django/conf/global_settings.py | 5 ----- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'django') diff --git a/django/conf/__init__.py b/django/conf/__init__.py index 9e4b0a4b1e..6813afb3b8 100644 --- a/django/conf/__init__.py +++ b/django/conf/__init__.py @@ -115,15 +115,15 @@ class Settings: if setting.isupper(): setting_value = getattr(mod, setting) + if setting == 'SECRET_KEY' and not setting_value: + raise ImproperlyConfigured('The SECRET_KEY setting must not be empty.') + if (setting in tuple_settings and not isinstance(setting_value, (list, tuple))): raise ImproperlyConfigured("The %s setting must be a list or a tuple. " % setting) setattr(self, setting, setting_value) self._explicit_settings.add(setting) - if not self.SECRET_KEY: - raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.") - if self.is_overridden('DEFAULT_CONTENT_TYPE'): warnings.warn('The DEFAULT_CONTENT_TYPE setting is deprecated.', RemovedInDjango30Warning) @@ -139,6 +139,11 @@ class Settings: os.environ['TZ'] = self.TIME_ZONE time.tzset() + def __getattr__(self, name): + if name == 'SECRET_KEY': + raise ImproperlyConfigured('The SECRET_KEY setting must be set.') + raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__.__name__, name)) + def is_overridden(self, setting): return setting in self._explicit_settings diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py index befade160f..26fa492892 100644 --- a/django/conf/global_settings.py +++ b/django/conf/global_settings.py @@ -256,11 +256,6 @@ ABSOLUTE_URL_OVERRIDES = {} # ] IGNORABLE_404_URLS = [] -# A secret key for this particular Django installation. Used in secret-key -# hashing algorithms. Set this in your settings, or Django will complain -# loudly. -SECRET_KEY = '' - # Default file storage mechanism that holds media. DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage' -- cgit v1.3