override_settings将完全更改存储在设置旁边的对象.也就是说,原始值将被销毁. modify_settings将修改现有对象.这可以通过获取append,prepend和remove参数来实现.您在文档中看到的对象不是MIDDLEWARE对象,它是在MIDDLEWARE对象上执行以修改它的步骤列表.例如,给定settings.py中定义的以下MIDDLEWARE:
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',
]
如果您使用:
@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',
],
})
它产生最终设置:
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'
]
override_settings的相同结果将需要上面的整个结果对象.
这里的问题很明显.如果我们更改settings.py中的原始MIDDLEWARE设置,我们将不得不更新我们的测试.如果我们使用modify_settings,我们可能仍然会很好.
我同意这些文档并不清楚,因为它并没有真正说清楚’append’是一个特殊的关键字,例如.