gpt4 book ai didi

python - Django 中的 override_settings 和 modify_settings 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 20:22:28 24 4
gpt4 key购买 nike

Django 的 docs on testing tools提及用于测试的 @override_settings 和 @modify_settings 装饰器,但从文档中不清楚(至少对我而言)它们之间有什么区别。

那么,它是什么?

最佳答案

override_settings 将完全更改存储在设置中的对象。也就是原有的值(value)会被破坏。 modify_settings 将修改现有对象。这通过采用 appendprependremove 参数来实现。您在文档中看到的对象不是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com