- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
Django 的 docs on testing tools提及用于测试的 @override_settings 和 @modify_settings 装饰器,但从文档中不清楚(至少对我而言)它们之间有什么区别。
那么,它是什么?
最佳答案
override_settings
将完全更改存储在设置中的对象。也就是原有的值(value)会被破坏。 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'
是一个特殊关键字,例如。
关于python - Django 中的 override_settings 和 modify_settings 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42905759/
Django 的 docs on testing tools提及用于测试的 @override_settings 和 @modify_settings 装饰器,但从文档中不清楚(至少对我而言)它们之间
我是一名优秀的程序员,十分优秀!