gpt4 book ai didi

python - 如何使用 Django-oauth-toolkit 进行身份验证,使用 Django-rest-framework 测试 API 端点

转载 作者:太空狗 更新时间:2023-10-29 16:53:40 27 4
gpt4 key购买 nike

我有一个 Django-rest-framework viewset/router 来定义 API 端点。 View 集定义如下:

class DocumentViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
model = Document

路由器定义为

router = DefaultRouter()
router.register(r'documents', viewsets.DocumentViewSet)

使用 url 模式 url(r'^api/', include(router.urls))

我可以通过获取正确的访问 token 并使用它进行授权,在浏览器/通过 curl 中访问这个端点。但是,尚不清楚如何针对此端点编写测试。

这是我尝试过的:

class DocumentAPITests(APITestCase):
def test_get_all_documents(self):
user = User.objects.create_user('test', 'test@test.com', 'test')
client = APIClient()
client.credentials(username="test", password="test")
response = client.get("/api/documents/")
self.assertEqual(response.status_code, 200)

此操作失败,client.get() 调用返回 HTTP 401 响应。使用 django-oauth-toolkit 测试 DRF 中的 API 端点以进行 oauth2 身份验证的正确方法是什么?

最佳答案

当您编写测试时,您的目标应该是从测试本身中提取您未测试的任何内容,通常将任何设置代码放入测试的 setUp 方法中。在使用 OAuth 进行 API 测试的情况下,这通常包括测试用户、OAuth 应用程序和事件访问 token 。

对于 django-oauth-toolkit 和其他 Django 应用程序,我总是推荐 looking at the tests to see how they do it 。这使您可以避免进行不必要的 API 调用,尤其是对于像 OAuth 这样的多部分流程,并且只创建所需的少数模型对象。

def setUp(self):
self.test_user = UserModel.objects.create_user("test_user", "test@user.com", "123456")

self.application = Application(
name="Test Application",
redirect_uris="http://localhost",
user=self.test_user,
client_type=Application.CLIENT_CONFIDENTIAL,
authorization_grant_type=Application.GRANT_AUTHORIZATION_CODE,
)
self.application.save()

def test_revoke_access_token(self):
from datetime import datetime
from django.utils import timezone

tok = AccessToken.objects.create(
user=self.test_user, token='1234567890',
application=self.application, scope='read write',
expires=timezone.now() + datetime.timedelta(days=1)
)

从那里您只需要使用已生成的 token 进行身份验证。您可以通过 injecting the Authorization header 执行此操作,也可以通过 Django REST Framework 提供的 use the force_authenticate method 执行此操作。

关于python - 如何使用 Django-oauth-toolkit 进行身份验证,使用 Django-rest-framework 测试 API 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27641703/

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