override_settingscompletely change the object stored on the installation side. That is, the original value will be destroyed. modify_settingswill change an existing object in place. This works using parameters append, prependand remove. The object that you see in the documentation is not an object MIDDLEWARE, it is a list of steps that you must follow for the object MIDDLEWAREto change it. For example, given the following MIDDLEWARE, defined in settings.py:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
If you use:
@modify_settings(MIDDLEWARE={
'append': 'django.middleware.cache.FetchFromCacheMiddleware',
'prepend': 'django.middleware.cache.UpdateCacheMiddleware',
'remove': [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
],
})
It gives the final settings:
MIDDLEWARE=[
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware'
]
The same result with override_settingswill require the entire resulting object above.
The problem is obvious. If we change the initial settings MIDDLEWAREin settings.py, we will have to update our test. If we use modify_settings, we will probably still be fine.
, , , 'append' , .