Django Rest Framework的凭据不正确?

时间:2016-07-18 20:21:26

标签: python django django-rest-framework token restful-authentication

我尝试使用Django Rest Framework设置令牌身份验证。我目前正在编写一些测试,看看我是否可以获得为用户返回的令牌。下面是单元测试的代码(在测试用例内)。

def test_create_valid_request(self):
    u = User.objects.create(username='test1', password='thisis8chars')
    Token.objects.create(user=u)

    # these assertions all pass
    self.assertEqual(User.objects.get(username='test1'), u)
    self.assertEqual(u.username, 'test1')
    self.assertEqual(u.password, 'thisis8chars')

    data = {'username': 'test1', 'password': 'thisis8chars'}
    url = "/api-token-auth/"

    response = self.client.post(url, data, format="json")
    print response.status_code
    print response.content

打印:

400
{"non_field_errors":["Unable to log in with provided credentials."]}

我知道我的凭据一定有问题,但我无法看到。我创建一个用户,测试其属性,并发出一个post请求来检索令牌。我在httpie的Django开发服务器上手动测试了它,它可以工作并返回令牌。任何想法可能是什么问题?这是我的测试设置的问题吗?如果是这样,是什么?

如有必要,我可以发布/描述更多代码。

由于

2 个答案:

答案 0 :(得分:1)

好的,错误非常简单:我想要User.objects.create_user而不是User.objects.create

我尝试使用上面代码的密码是有问题的,因为它没有散列或盐渍,而且因为Django不存储或发送纯文本密码,所以我发送纯文本密码导致凭据错误。

答案 1 :(得分:0)

正如您已经说过的那样,您需要使用User.objects.create_user

要添加此功能,如果您已经实例化了User对象并想要更改其密码,则需要调用user.set_password(raw_password)方法。