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