The way the discussion has gone, I think I favor individual settings over
settings grouped in a dictionary in this case.
If we drop magical merging of dictionary settings (which seems like it will
cause more confusion), a user's options for customizing a single key in
settings are:
1. Redefine the entire dictionary in a project's settings
2. Use the following pattern to update a subset of keys:
from django.conf.global_settings import SECURITY_MIDDLEWARE
SECURITY_MIDDLEWARE.update({
'SSL_HOST': 'staging.my.host.com',
})
We have admonitions in the docs that users should not import from
global_settings and I don't care for 1 either.
On Saturday, August 30, 2014 8:58:17 PM UTC-4, Michael Manfre wrote:
>
>
>
>
> On Sat, Aug 30, 2014 at 8:33 PM, Josh Smeaton <[email protected]
> <javascript:>> wrote:
>>
>> I think the problem becomes more pronounced when you want to override a
>> single sub-setting between your different environments:
>>
>> # base.py
>>
>> SECURITY_MIDDLEWARE = {
>> 'HSTS_SECONDS': 10,
>> 'HSTS_INCLUDE_SUBDOMAINS': True,
>> 'CONTENT_TYPE_NOSNIFF': True,
>> 'BROWSER_XSS_FILTER': True,
>> 'SSL_REDIRECT': False,
>> 'SSL_HOST': 'prod.my.host.com',
>> }
>>
>>
>>
>> #staging.py
>>
>> from base import *
>>
>>
>>
>> SECURITY_MIDDLEWARE = {
>> 'SSL_HOST': 'staging.my.host.com',
>> }
>>
>>
>> Does staging now represent the merged dicts of base and staging, or the
>> merged dicts of default and staging? I believe, with the merged dict
>> implementation, it is the merge of staging and default. Now if all of the
>> settings were their own setting rather than an entry in a dict, I'd just
>> set the single setting I'd need to change, and be done with it.
>>
>> There are very little gains to using a dict, and I would argue it harms
>> readability and the use of settings in general unless it's actually
>> required.
>>
>
> Auto merging dicts is the wrong approach. Staging.py should contain
> exactly what it appears to contain, SECURITY_MIDDLEWARE with a single key
> defined. If some one needs to tweak one of the values, they should use
> dict's update. This is the same behavior that is required for DATABASES and
> the other existing dict settings.
>
> SECURITY_MIDDLEWARE.update({
> 'SSL_HOST': 'staging.my.host.com',
> })
>
> Regards,
> Michael Manfre
>
--
You received this message because you are subscribed to the Google Groups
"Django developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-developers.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-developers/189765f6-1db6-4eee-b2a4-3d9626e45d7b%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.