我正在使用Python 3.9、Django 3.2以及DRF(Django Rest Framework)3.12.4,并尝试通过simple JWT添加JWT认证方法。为了测试我的认证方式,需要在设置中加入如下内容:
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework_simplejwt.authentication.JWTAuthentication",
),
我希望避免直接修改设置文件,而是将所有改动保持在测试文件中。这是因为我的项目分别有本地和生产环境的设置,其中本地设置使用的是一个虚拟的认证后端。当我在本地设置中设置上述认证类时,所有测试都能顺利通过。
我尝试使用@override_settings
装饰器来实现这一目的:
@override_settings(
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework_simplejwt.authentication.JWTAuthentication",
),
}
)
这个方法看起来运作正常——当我在测试中打印设置时:
from django.conf import settings
from rest_framework.settings import api_settings
...
def setUp(self):
print(settings.REST_FRAMEWORK)
print(api_settings.DEFAULT_AUTHENTICATION_CLASSES)
输出结果为:
{'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework_simplejwt.authentication.JWTAuthentication',)}
[<class 'rest_framework_simplejwt.authentication.JWTAuthentication'>]
这表明设置似乎已经被正确覆盖了。然而,测试并未通过——我收到了来自虚拟认证后端的错误,就像设置根本没有被覆盖一样。我还尝试了直接修改django.conf
中的设置,这也是我尽量想避免的做法,但它同样没有解决我的问题。我是否遗漏了什么?或许我的解决方案或测试逻辑存在某些误区?提前感谢您的帮助和指导。