使用凭据和djoser测试Django API登录

时间:2015-03-19 08:56:10

标签: python django testing django-rest-framework

我目前正在尝试使用Django测试我的API端点。到目前为止,我已经使用了APITestCase,但是在登录和使用我的令牌方面遇到了问题。

我有一个密码('1')的Clark用户,我将他登录,检索他的令牌并在发送请求之前将其添加到标题中。但我仍然得到“糟糕的凭证错误”。

    connection_data = {'email':self.clark_user.email, 'password': '1'}
    self.client.login(email=self.clark_user.email, password='1')     

    token = self.client.post(settings.SERVER_HOST+'/api/v1/auth/login', connection_data)
    self.client.credentials(HTTP_AUTHORIZATION='Token ' + token.data['auth_token'])

    response = self.client.patch(self.url_people, serializer.data, format='json')
    self.assertEqual(response.status_code, status.HTTP_200_OK)
    self.client.logout()

我的筹码如下:

并且

    来自rest_framework.test的
  • 导入APITestCase
  • from core.test_utils import BaseTest For my tests。

我用的是我的测试。

1 个答案:

答案 0 :(得分:1)

Django REST框架有APIClient类用于此目的。我认为,而不是通过http获取Token,它可以直接从数据库中取出。代码看起来像

from rest_framework.authtoken.models import Token
from rest_framework.test import APIClient

# Include an appropriate `Authorization:` header on all requests.
token = Token.objects.get(user__username=self.clark_user.username)
client = APIClient()
client.credentials(HTTP_AUTHORIZATION='Token ' + token.key)

response = client.patch(self.url_people, serializer.data, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
client.logout()

可以在Testing Page找到文档。